質問: vba shellでメールを作成した際の変数は? エクセルvbaから、shellメソッド?を使い、サンダーバードのメール作成画面を呼び出し 送信先、件名、本文はワークシートから持ってくるというプログラムを作りたいです。 webを調べた結果、自分にもできそうなのはshellでのメール作成画面の呼び出しだったので 以下のプログラムをテストしてます。 shell """c:\program files\mozilla thunderbird\thunderbird.exe"" -compose ""to="" アドレス "",subject=件名,body=本文""", vbnormalfocus 上記プログラムで、メール画面を呼び出せたのですが 送信先、件名、本文を変数から入力することはできないのでしょうか? 例えば上記例で言うと、to=の後の「アドレス」を変数にしたいのです。 例えば上記のプログラムの前に アドレス=○○@yahoo.co.jp のように、変数宣言をしても、出てきた送信画面では「アドレス」のまま、固定値のままなのです。 メール作成画面にデータを渡す際、変数の使用をする方法はあるのでしょうか?
回答: shell関数のコマンドに限らず、vbaコード内で文字列と変数をつなぐ時は "文字列" & hensuu1 & "文字列" & hensuu2 & "文字列" ..のように、 文字列は『"』(ダブルクォート)で括り、 変数は『"』で括りません。 文字列と繋ぐ時は『&』 で繋ぎます。 文字列内に『"』ダブルクォートそのものを使いたい時は 『""』 2個重ねる事で『"』になります。 なので dim アドレス as string dim 件名 as string dim 本文 as string アドレス = "xxxxx" 件名 = "yyyyy" 本文 = "zzzzz" shell """c:\program files\mozilla thunderbird\thunderbird.exe"" -compose to=" & アドレス & ",subject=""" & 件名 & """,body=""" & 本文 & """", vbnormalfocus ..こんな感じになります。 少し整理するなら dim spath as string dim mailad as string dim subjct as string dim bodyst as string spath = """c:\program files\mozilla thunderbird\thunderbird.exe"" -compose " mailad = "アドレス" subjct = "件名" bodyst = "本文" shell spath & "to=" & mailad & "," & _ "subject=""" & subjct & """," & _ "body=""" & bodyst & """" ..みたく。 また、 http://okwave.jp/qa/q5977178.html?order=asc こちらも参考にすると良いかもしれません。 その場合、 sub try_3 の最後の箇所 > arg = "mailto:メールアドレス?" & _ > "subject=件名&" & _ > "body=" & arg > shell spath & arg ここを変数で対応させたいなら以下のように変更です。 dim mailad as string dim subjct as string mailad = "アドレス" subjct = "件名" arg = "to=" & mailad & "," & _ "subject=""" & subjct & """," & _ "body=" & arg shell spath & arg