2016-08-10 114 views
2

VBA内でコマンドプロンプトを開いたときにmsgが機能しなくなることがありますが、cmd.exeまたは "コマンドプロンプト"窓から。次のようにVBAからcommand.comまたはcmd.exeを実行するとMSGコマンドに問題が発生する

私のVBAコードは次のとおりです。

Sub test() 
Dim str_to_pass As String 

str_to_pass = "msg" 

Call Shell("cmd.exe /s /k " & str_to_pass, vbNormalFocus) 

End Sub 

コマンドプロンプトの内部からの私の結果:「『MSG』が、内部または外部コマンドとして認識されていません...」

しかし、もしIコマンドプロンプトを開くか、ウィンドウからcmd.exeを最初に入力し、 "msg"とタイプします。msgの使い方の構文が表示されます。

このように、vbaからのコマンドプロンプトのこの使い勝手にアクセスするにはどうすればよいのですか。また、cmd.exeの起動方法によってコマンドが異なるのはなぜですか?

+0

混乱を追加して、私はバッチファイルを作成するために、コードのセクションを作成しましたshellコマンドを実行してから、batファイルを実行してください。バッチファイルを作成し、バッチファイルはVBA外から開くと動作しますが、バグをプログラムでVBAから開くと、前と同じ結果になります。 – user4467707

+0

コマンドプロンプトで 'where msg'と入力し、' str_to_pass'を印刷するフルパス名に変更します。 –

+0

Windows \ System32にある可能性があります。それが私の所であり、.exeへの完全なパスを入力すると、同じエラーメッセージが生成されます。 (私は上司が私に実際の仕事をさせたのは怒っていました。これは私が今日取り組んでいたものですから!)これは本当に良い質問です。 – Tim

答えて

1

問題は、64ビットWindowsが32ビットアプリケーションとの間で呼び出しを行う方法にあります。 Windowsには、SysNativeというフォルダという仮想フォルダがあり、32ビットアプリケーションから64ビットの実行可能ファイルにアクセスするときは、System32の代わりに使用する必要があります。ここでは偉大な説明があります:http://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm

コードをする必要があります:

str_to_pass = "c:\windows\sysnative\msg" 
Call Shell("cmd.exe /s /k " & str_to_pass, vbNormalFocus) 

そして、ここで関連のMSDNのページがあります:https://msdn.microsoft.com/en-us/library/aa384187%28v=vs.85%29.aspx

+0

これはありがとうございます! – user4467707

関連する問題