いつもお世話になります
すみません、先日(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...
-
EXCEL VBAから他アプリケーショ...
-
実行ファイルへのドラッグ&ド...
-
Process.Startで起動したアプリ...
-
ubuntu で emacs を GUI で使う...
-
Windowsの起動時間
-
QueryPerformanceCounter の使...
-
VisualBasic2005 外部アプリを...
-
Microsoft Edgeが起動しない
-
Vba アプリケーションが立ち上...
-
CreateProcessのエラー
-
フォームの最前面が効かない
-
VC++にて_spawnlpでプロセス起動
-
2重起動の制御に関して
-
VBからExcelに書き込む方法
-
VBAでSeleniumからChromeを起動...
-
DetectExcel 参照設定
-
VBSで起動したアプリが前面表示...
-
VBS 入力可能状態を判別できま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アウトルックが起動しているか...
-
分かる人は簡単なのだろうが、v...
-
VBAでOutlookを終了させたい Ex...
-
VBSから別のVBS起動するとき変...
-
VBで実行中のEXEファイルの情報...
-
WinSCPで画像のように puttyを...
-
VBSで起動したアプリが前面表示...
-
Windows上のプログラム。「予め...
-
ACCESS VBAで別のACCESS(mdb)を...
-
Process.Startで起動したアプリ...
-
64bitで作ったEXEを32bitで起動...
-
VBSでExcelのUserFormをエクス...
-
EXCEL VBAから他アプリケーショ...
-
VBAでSeleniumからChromeを起動...
-
フォームの最前面が効かない
-
AppActivateについて
-
VBAでIEが起動しているか...
-
VB6で呼び出し元の情報を取得す...
-
Vba アプリケーションが立ち上...
-
exeファイルを実行するとすぐに...
おすすめ情報