
ExcelからUWSCを使って他のソフト2個を動かして又、Excelに
戻ってくるのですが、UWSCが重なって動作を同時に行う為、次のソフトで実行してみました。すると同時には動作せずに1個のプログラムの動作が終わって次ののプログラムを実行してくれて良くのですが、戻るときにExcelプログラムが真っ白に表示されて上の部分にファイル名と応答無と出てそれ以上進みません。UWSCソフトを終了すれば元には戻りますが、うまく操作をさせるにはどうすれば良いですか?よろしくお願いします。
UWSCの動きは⇒スタートボタンの横のタスクバーにあるソフトをクリックから始まり⇒終わったら又、Excelのタブをクリックして戻ります。
次のソフトはWebで見つけたソフトです。
外部プログラムの実行と処理待ち
そこで、以下のサンプルマクロでは、Shell関数を使用して外部プログラムを実行し、そのプログラムが終了するまで待つように処理を施してあります。
*もうひとつの質問ですが、Win32 API関数の宣言はどこに記載をすればいいのですか?
このままエディータに書けばいいのでしょうか
'--- Win32 API 関数の宣言 ---
Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
'--- Win32 API 定数の宣言 ---
Global Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Global Const INFINITE As Long = &HFFFF
Sub WaitRun()
Dim TaskId As Long 'タスクID
Dim hProc As Variant 'プロセスハンドル
' 外部プログラムの実行
TaskId = Shell("c:\Test.bat", 2)
' プロセスハンドルの取得
hProc = OpenProcess(PROCESS_ALL_ACCESS, False, TaskId)
' プロセスのオープン
If OpenProcess(PROCESS_ALL_ACCESS, False, TaskId) <> vbNull Then
' プロセスのシグナル待ち
Call WaitForSingleObject(hProc, INFINITE)
' プロセスクローズ
CloseHandle hProc
End If
No.1ベストアンサー
- 回答日時:
こんばんは。
ここカテゴリは、UWSCの直接のサポートは出来ないですが、基本的なことが違っているような気がしてなりません。
>TaskId = Shell("c:\Test.bat", 2)
これは、Moug で出ていたテクニックですね。
ただ、Mougのサンプルテクニックが、必ずしも、正解だと私は思っていないのです。
一旦、チャイルドプロセスになって、それは、Batch プログラムが戻るようになっているという条件だと思います。それと、Batch プログラムの内容にも依存してくるような気がします。通常、そのようなコードは、「ありえない」と思うのです。単に、プロセスの戻り値を調べて、それをクローズするために、Win32 API関数を使うだけであって、そのコード自体は、あまり意味があるようには思えません。Batch プログラムは、コマンドプロンプトが動くということが前提のアプリケーションソフトでなくてはなりません。あまり、プログラムに詳しくない方が、むやみにWin32 APIには手を出さないほうがよいです。
UWSC は、UWSC 側で処理したほうが簡単だと思いますし、場合によれば、Excel VBA単独で処理してもかまわないように思います。なお、UWSC には、Win32 APIの関数と同等の機能を持つ関数はそろえているはずです。
もう少し、UWSC のヘルプとサイトをごらんになって勉強されたほうがよろしいのではないでしょうか。Moug のサンプルマクロは、意味が違うと思います。
それから、UWSC 自体は、UWSCが先に起動するようなスタイルのほうが多いのではないかと思います。
Help には、
# COM (ActiveX): Excelや InternetExplorer等の COMインターフェースを備えたアプリの制御ができます
例:
Excel = CreateOLEObj("Excel.Application")
(ただし、COMで、組み込んだものが、正しく外れるのかは、私は試したことがないので分かりません。実行後、終了した時点で、タスクマネージャーのプロセス側で確認したほうがよさそうです。)
Win32は私自身も触らないほうが良いと思っています。丁寧な回答ありがとうございました。UWSCのヘルプで勉強したいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
sendkeysにてALT+CTRL+INSERTを...
-
コンソールでの日本語入力について
-
C言語で途中までしか、プログラ...
-
パソコンの演算速度について
-
携帯でc言語のプログラムを実行...
-
timeEndPeriodを呼ばないと
-
vba GetAsyncKeyState関数について
-
C言語 fork()について
-
アクセス[ファイルを開かずに、...
-
実行中の実行ファイルの上書き
-
並列計算をしたときのシステム...
-
DPマッチングのプログラミング
-
VB6プログラムの実行中でのこと
-
”行数のカウント”はどうすれば...
-
指定した時刻に実行するプログ...
-
UWSCがうまく動かない
-
実行時エラー429
-
バックグラウンドで実行される...
-
VC++でのプログラム実行中に変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
パソコンの演算速度について
-
VB上で実行中の無限ループの止め方
-
sendkeysにてALT+CTRL+INSERTを...
-
C言語で途中までしか、プログラ...
-
VBAで外部プログラムを非表示で...
-
システム資源とは?
-
実行時エラー429
-
終了してもプログラムが実行し...
-
sleep()関数について
-
他の実行ファイルを実行するプ...
-
RPG パラメーターについて
-
UWSCがうまく動かない
-
Windows10でDOSゲーム
-
clock関数は正確じゃないの?
-
C言語でプログラムを再起動
-
Excel VBA から外部プログラム...
-
system関数を使用してsuコマン...
-
プロセス間通信について
-
Borland C++を利用しているので...
おすすめ情報