
いつもお世話になります
今、AutoCadLtの以後にScriptファイルを作成し、その後下記のようにWScript.Shellから
ShellObj.Run でAutocadLtを立ち上げてからコマンドラインにScriptファイルの実行コマンドを
送ろうと考えています
Dim ShellObj
ChDir "C:\Program Files\Autodesk\AutoCAD LT 2018"
ShellObj.Run "acadlt.exe", 1, False
AppActivate "Autodesk AutoCAD"
SendKeys "filedia 0" & Chr(13) & "script" & Chr(13) & Fname & Chr(13), True
しかし、ShellObj.Run での第三パラメータでアプリケーションの終了待ちをFalseにすると
次のAppActivate "Autodesk AutoCAD" のステートメントがAutoCad立ち上げり前に実行されて
実行時エラーになってしまいます
終了待ちをTrueにするとアプリケーションの終了待ちになって、プログラムが待ち状態になってしまいます。
上記の AppActivate "Autodesk AutoCAD" の実行をAutoCadLtの立ち上がり終了を待って実行させるには何か有るのでしょうか?
分かりましたら是非、教えてください
ちなみにOn Error Gotoも使ってみましたが上手く行きませんでした
以上、よろしくお願いします
No.1ベストアンサー
- 回答日時:
こんにちは。
以前、ご質問になられていた内容のような気がします。
もう少し詳しい説明が必要だったのでしょうね。
結論を先にいうと、WScript からですと、SFC mini か、Dynamic Wrapper を使って、Win APIを呼び出しする方法を考えます。今、調べてみると SFC miniのほうがわかりやすいかもしれません。wmi という方法もあるようですが、完璧に行かないような気がしてなりません。
CAD系のソフトは手に入れたいとは思っていますが、とても本格的なものは私は使いこなせません。それに、AutoCAD は、なかなか値段が高いようですから、無料期間30日はあっても、これだけのために、それを試すというのはちょっとできません。
立ち上げたら、
ShellObj.Run "acadlt.exe", 1, False
'×AppActivate は、メソッドで、オブジェクトがありません。
>AppActivate "Autodesk AutoCAD"
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.AppActivate "Autodesk AutoCAD"
こう書くけれども、これでもうまくいかないはずです。
'×たぶん、これも動かないと思います。
SendKeys "filedia 0" & Chr(13) & "script" & Chr(13) & Fname & Chr(13), True
ShellObj.Run "acadlt.exe", 1, False
この後、ハンドル(hWnd)を取って、起動状態かを調べます。
Class 名は分かりますか? SPY++ か、Vector にある miniSpy で、クラス名を取得して、ハンドルを取ります。
Wscript の書き方は、余計な行が増えますので、わかりやすいように、VBAライクで書きます。
hWnd = FindWindow(strClassName, vbNullString)
SetForegroundWindow hWnd 'これで上に上げる
(ただ、他のソフトを多く立ち上げているとうまくいかないことがあるので、他のGetNextWindow のWin APIと組み合わせが必要なことがあります。
しかし、Sendkey を使う目的で、最前面化させるなら、SendMessage/PostMessage を使えば、最前面化の必要がありません。たぶん、PostMessageのほうがよいと思います。
SFC mini
https://ja.osdn.net/projects/sfcmini/releases/63 …
DyanamicWrapper (私は、こちらをずっと使ってきましたが、難しいです)
http://winbatch.hpdd.de/MyWbtHelp/htm/20100125.H …
ただ、他のソフトウェアをインストールできない環境ですと、Excel オートメーションから、Excel4Macro関数を利用するということになります。
p.s. 前回のユーザー書式の検出方法の考え方は分かっていただけたでしょうか。泥臭いやり方ですが、既存のリストに「ないもの」を探すという考え方でした。
いつもお世話になります
早速のご回答、ありがとうございます
まだまだ未熟者で、はっきり言ってまだ理解できていません
通常の仕事の中でこれからもいろいろと模索が続くと思います
質問の件もご回答に従い勉強させていただきます
それからユーザ書式の件もありがとうございました
同じやり方では有りませんが他との違いを見つけて何とか対処しました
いつも本当にありがとうございます
これからもよろしくお願い申し上げます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba UserFormを前面に出す方法を教えてください 1 2023/08/17 11:08
- Excel(エクセル) vba sendKeysを送る相手のソフトを前面に開くには 1 2023/07/20 16:42
- Excel(エクセル) vba レジストリの値を読み込教えてください教えてください 1 2023/07/14 14:09
- CAD・DTP Autocad Scriptファイルからの入力とコマンドラインからの入力が違う 1 2023/08/01 09:13
- CAD・DTP Auto CAD LT → Auto CAD 1 2022/04/20 12:29
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) Vba 互換モードでのAppActiveについて教えてください 2 2022/06/27 18:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトのエラーに...
-
[teraterm] waitコマンドで停止...
-
エクセル フォルダの画像を画...
-
VBscriptが起動しない?
-
exeファイルを実行するとコマン...
-
VScodeのエラー解決法 Pythonの...
-
複数のbatファイルを自動実行し...
-
「読み取りと実行」と「読み取...
-
Excel VBA ステップインが途中...
-
バッチファイルの内容を表示さ...
-
バッチファイルが不正終了して...
-
Windows System32 Security Hea...
-
VS2010の実行ディレクトリはど...
-
メッセージを他のPCに出したい
-
これってパソコンの最適化が完...
-
Excel(エクセル) VBA プロシー...
-
VBS実行時にコマンドプロンプト...
-
ネットワーク名が見つかりません
-
16進数の変換処理
-
pythonスクリプトを管理者権限...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトのエラーに...
-
[teraterm] waitコマンドで停止...
-
これってパソコンの最適化が完...
-
「読み取りと実行」と「読み取...
-
バッチファイルの内容を表示さ...
-
exeファイルを実行するとコマン...
-
VBscriptが起動しない?
-
複数のbatファイルを自動実行し...
-
エクセル フォルダの画像を画...
-
ネットワーク名が見つかりません
-
PDFファイルを開き、印刷し、閉...
-
Excel(エクセル) VBA プロシー...
-
Windows System32 Security Hea...
-
VBScriptでコマンドプロンプト...
-
Access の VBA 実行中に他の操...
-
【VB.NET】exeを実行すると「発...
-
バッチファイルが不正終了して...
-
16進数の変換処理
-
Excel VBA ステップインが途中...
-
pythonスクリプトを管理者権限...
おすすめ情報