VBAからexeファイルをShell関数で呼び出して引数を渡す方法

標記のメモです。

例えば「エクセルのセルの内容を、引数としてexeファイルに渡したい時」などに使えると思います。

VBAだけでは出来ないような処理は、exeファイルにやらせましょう。

VBAでの引数の渡し方

VBAから引数付きで起動する際のサンプルコードです。

Sub Sample()
    Shell "C:\Windows\Notepad.exe 引数1 引数2", 1
End Sub

「shell」関数の第一引数に、「”パス 引数1 引数2 ・・・引数n”」という感じでexeファイルに引数を渡します。(パスの後ろを半角スペースを入れて引数を入れていく)

「shell」関数の第二引数は省略可能です。

exe側の引数の取り出し方

↑のVBAのコードで引数を渡す為のexeファイルを作る方法。

C#

C#で引数を取り出す際のサンプルコードです。

string[] arguments;
arguments= System.Environment.GetCommandLineArgs();
//コマンドライン引数の表示
foreach (string argument in arguments)
{
    MessageBox.Show(argument);
}

例として、exeファイルを「”プログラムのパス 引数1 引数2“,1」で呼び出すと、「プログラムのパス」「引数1」「引数2」と書かれたメッセージボックス3回表示されます。

C

Cの場合は、main関数の引数に指定するだけです。(↓こんな感じ)

#include 

int main(int argc,char *argv[])
{
	int i;
	
	printf("引数の総個数 = %d\n", argc);
	for (i = 0; i < argc; i++) {
		printf("%d番目の引数 = %s\n", i, argv[i]);
	}
	return 0;
}

このコードで作ったexeファイルの名前を「test.exe」として、VBAから「Shell “c:\test.exe “会社” 辞めたい”, 1」とすると実行結果は以下の様なDOS窓が表示されます。

引数の総個数 = 4
0番目の引数 = c:\test.exe
1番目の引数 = 会社
2番目の引数 = 辞めたい

 

おわり

コメント