いつもお世話になります
すみません、先日(8/13)に投降したばかりの質問の再投稿で申し訳ございませんが
教えてもらった大村あつしさんの「Win32 API」の記事やほかの記事をみていろいろ
試してみましたがみんな上手くいきませんでした
そこで質問なのですが
大村あつしさんの本の中に「VBAから以下のような起動する手法は推奨できません。
あくまでもWaitForInputIdle関数の使用例として参考にしてください」と有ります
これは、VBAで出来ないという事なのでしょうか?
また、ほかのウェブから下記のプログラムを試してみました
Option Explicit
Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type
Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type
Private Const STARTF_USESHOWWINDOW = &H1
Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" _
(ByVal lpApplicationName As String, _
ByVal lpCommandLine As String, _
lpProcessAttributes As Any, _
lpThreadAttributes As Any, _
ByVal bInheritHandles As Long, _
ByVal dwCreationFlags As Long, _
lpEnvironment As Any, _
ByVal lpCurrentDriectory As String, _
lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function WaitForInputIdle Lib "user32" _
(ByVal hProcess As Long, _
ByVal dwMilliseconds As Long) As Long
Public Function ShellEx(ByVal sPath As String, Optional ByVal sParam As String = "") As Boolean
Dim tStInfo As STARTUPINFO
Dim tPrInfo As PROCESS_INFORMATION
On Local Error GoTo Error_Handler
ShellEx = False
With tStInfo
.cb = LenB(tStInfo)
.dwFlags = STARTF_USESHOWWINDOW
.wShowWindow = 6
End With
'アプリケーションを実行しプロセスを作成する
If CreateProcess(vbNullString, sPath & " " & sParam, ByVal 0&, _
ByVal 0&, 1&, NORMAL_PRIORITY_CLASS, ByVal 0&, _
vbNullString, tStInfo, tPrInfo) = 0 Then GoTo Error_Handler
Do
If WaitForInputIdle(tPrInfo.hProcess, &HFFFFFFFF) = 0 Then Exit Do
Loop
ShellEx = True
Exit Function
'====== エラー処理
Error_Handler:
MsgBox "?G???[No:" & Err.Number & vbCrLf & "?G???[??e:" & Err.Description, vbCritical
Err.Clear
End Function
Sub Test()
Dim strApplicationName As String
strApplicationName = "C:\Program Files\Autodesk\AutoCAD LT 2018\Acadlt.exe"
Debug.Print ShellEx(strApplicationName)
End Sub
起動させたら、すぐにTrueが出てプログラムは入力状態を待つことは出来ないようです
以上、何度もすいません
よろしくお願い申し上げます
No.1ベストアンサー
- 回答日時:
大村あつしさんの本の中に「VBAから以下のような起動する手法は推奨できません。
あくまでもWaitForInputIdle関数の使用例として参考にしてください」と有ります
これは、VBAで出来ないという事なのでしょうか?
出来ないと言う事ではありません。
私は、本を拝読したことがないので詳細は分かりませんが、文中に推奨しない根拠が示されていると思います。
Win32 API と言う事で、WindowsOS、Excel、AutoCAD、共に32bit版だと思いますが、
仕様において的外れかもしれませんが、を起動する目的の為だけなら、あくまで、だけですが、
もっとシンプルにWshShell Runメソッドで実現した方が良いかと思います。
参考:https://vbabeginner.net/vba%E3%81%A7%E4%BB%96%E3 …
>起動させたら、すぐにTrueが出てプログラムは入力状態を待つことは出来ないようです
どの様な状態で何を示しているか、私には、わかりません。プログラムとは何のプログラムですか?
If WaitForInputIdle(tPrInfo.hProcess, &HFFFFFFFF) = 0 Then Exit Do
0が返っているにもかかわらず、起動できないと言う事でしょうか?
>先日(8/13)に投降した
記事も見つかりませんでしたし、AUTOCADについても知識がありませんが
仕様などわからないので、AUTOCADのAPIでしたら、フォーラム(US)があるようですので、そちらに投稿された方が
有益な情報を得られる可能性が高いと思います。また、起動に関する記事もすでにあるみたいですね。
Visual Basic Customization https://forums.autodesk.com/t5/visual-basic-cust …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アウトルックが起動しているか...
-
VBAでOutlookを終了させたい Ex...
-
VBSでExcelのUserFormをエクス...
-
64bitで作ったEXEを32bitで起動...
-
VBで実行中のEXEファイルの情報...
-
AppActivateについて
-
VBSで起動したアプリが前面表示...
-
VBで一定時間毎に他のプログ...
-
HTMLタグの中にDLLを埋め込む事...
-
VBSから別のVBS起動するとき変...
-
二重起動禁止にする理由とは
-
Windows上のプログラム。「予め...
-
C#のフォームから起動するブラ...
-
EclipseとTomcat使用時、すぐに...
-
Eclipseでjavascriptが動かない
-
VBAでSeleniumからChromeを起動...
-
iPad) URL Schemeを使ってアプ...
-
MSペイントを画像ファイル名を...
-
WinSCPで画像のように puttyを...
-
exeファイルを実行するとすぐに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アウトルックが起動しているか...
-
WinSCPで画像のように puttyを...
-
VBSから別のVBS起動するとき変...
-
Windows上のプログラム。「予め...
-
VBAでOutlookを終了させたい Ex...
-
VBで実行中のEXEファイルの情報...
-
VBSで起動したアプリが前面表示...
-
Process.Startで起動したアプリ...
-
EXCEL VBAから他アプリケーショ...
-
64bitで作ったEXEを32bitで起動...
-
exeファイルを実行するとすぐに...
-
リムーバブルディスクのフォー...
-
VB6で呼び出し元の情報を取得す...
-
VBAでIEが起動しているか...
-
フォームの最前面が効かない
-
VBAでSeleniumからChromeを起動...
-
エクセル起動時別プロセスで開く
-
VBSでExcelのUserFormをエクス...
-
ACCESS VBAで別のACCESS(mdb)を...
-
別アプリの起動、終了について
おすすめ情報