2016-07-23 21 views
1

少しのプロジェクトでは、マクロでcmd.exeを開き、数行のコードを実行します。VBAからCMDに複数行のコードを入力する方法は?

私はいくつかの良い例をウェブで検索し、適切な解決策を見つけることができませんでした。私は修正を試してみましたコードは以下の通りです:

strToPrint = "Hello World!" 
Shell "cmd.exe /K echo " & strToPrint, vbNormalFocus 

私が上で、このコードを見つけました:私は、コードの複数行にそれを回すしようとしましたが、次のコードを実行した後、両方のライン私のテストのためにHow to write message to command window from VBA?

私はシェルを2回呼び出したとき、私はそれが2回実行されますが、私は一つに複数の行を配置する方法を見つけ出すことができないことを、理解して

Sub CMD_VBA_Script() 

Shell "cmd.exe /K echo Hello World!", vbNormalFocus 
Shell "cmd.exe /K color 0a", vbNormalFocus 

End Sub 

:以下のコードを参照してください、別のコマンド・ウィンドウで実行されていますコマンドウィンドウ。

私の究極の目標は、VBAから次のスクリプトを呼び出すことです:

@echo off 
title Matrix 
color 0a 
mode 1000 

:a 
echo %random%%random% 
goto a 

誰かがコマンドプロンプトにVBAから複数のコード行を実行する方法を正しい方向に私を助けることができますか?

よろしく、短期でそう Dubblej

答えて

3
MyFile = "C:\cmdcode.bat" 
fnum = FreeFile() 
Open MyFile For Output As #fnum 
Print #fnum, "@echo off" 
Print #fnum, "title Matrix" 
Print #fnum, "color 0a" 
Print #fnum, "mode 1000" 
Print #fnum, "" 
Print #fnum, ":a" 
Print #fnum, "echo %random%%random%" 
Print #fnum, "goto a" 
Close #fnum 


' Run bat-file: 
Shell MyFile, vbNormalFocus 


' optional, remove bat-file: 
Kill "C:\cmdcode.bat" 

。あなたが実行するバットファイルを作成する必要があります。 それが行わだ後、あなたがコマンドプロンプトバッチファイルを実行するように見えますKill

+0

はそれは素晴らしい作品、ありがとうございます! Killコマンドの前にコード内に 'Application.Wait(Now +#12:00:03 AM#)'を追加しました。ファイルが3秒間実行されてから殺されました。 – Dubblej

+0

問題ありません!私は通常、コードを遅らせるためにsleep()関数を使用します。 'Sleep(3000)'は少し書くのが簡単です。 – Andreas

1

でそれを削除することができバットファイルを必要としない場合 - バッチはステートフルなので、単純に個別の行を実行することは行っていませんバッチ全体を実行するのと同じ効果を得ることができます。どちらかcmdプロセスのstdinストリームにウィンドウメッセージ、または配管を送る:

他の二つの代替的なアプローチは、そのまますばらしいスタイルが入力した一部の自動プロセスでコマンドを実行するcmd.exeの対話型のインスタンスを指示することにより、バッチ実行を偽造伴います。私は、その特有の妙(文書化されていない行動にすなわち依存)のこれらのアプローチのいずれかをお勧めしません

それが意図だよう最高のアプローチは、単にバッチファイルを実行することです - あなたはにバッチを書く必要があるだろうその後、一時的に最初のファイル、およびそれを実行します。ここからコードを使用して

https://support.microsoft.com/en-us/kb/195763

Dim tempFileName As String 
tempFileName = CreateTempFile("SomeBatch.cmd") 

WriteToBatchFile(tempFileName) ' you will have to write to the temp batch file yourself here 

Shell "cmd.exe /c """ & tempFileName & """", vbHide, True ' Run the batch file, then cmd.exe will terminate. The Shell function will block until cmd is closed 

Kill tempFile ' delete the temp batch file 
+0

説明していただきありがとうございます。 – Dubblej

関連する問題