• ベストアンサー
  • 困ってます

VBA shellでメールを作成した際の変数は?

エクセルVBAから、shellメソッド?を使い、サンダーバードのメール作成画面を呼び出し 送信先、件名、本文はワークシートから持ってくるというプログラムを作りたいです。 webを調べた結果、自分にもできそうなのはshellでのメール作成画面の呼び出しだったので 以下のプログラムをテストしてます。 Shell """C:\Program Files\Mozilla Thunderbird\thunderbird.exe"" -compose ""to="" アドレス "",subject=件名,body=本文""", vbNormalFocus 上記プログラムで、メール画面を呼び出せたのですが 送信先、件名、本文を変数から入力することはできないのでしょうか? 例えば上記例で言うと、to=の後の「アドレス」を変数にしたいのです。 例えば上記のプログラムの前に アドレス=○○@yahoo.co.jp のように、変数宣言をしても、出てきた送信画面では「アドレス」のまま、固定値のままなのです。 メール作成画面にデータを渡す際、変数の使用をする方法はあるのでしょうか?

共感・応援の気持ちを伝えよう!

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • end-u
  • ベストアンサー率79% (496/625)

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

  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 & """" で対応出来ました。謎が解けました。 ありがとうございました!

関連するQ&A

  • VBA サンダーバードのメール自動作成

    いつもお世話になってます。 サンダーバードでメールを自動作成しようと思い、回答者さんのアドバイスで以下のコードを 作成しました。 【仕様】 sheet2のA列に、メールの宛先と本文の文字列が下方向に並んでおり、ループしながら宛先と本文を新規メールに送っていく。 Dim sPath As String Dim Mailad As String Dim Subjct As String Dim Bodyst As String Do Until Sheets("sheet2").Range("J" & cnt).Value = syuryono + 1 If Sheets("sheet2").Range("I" & cnt).Value = "アドレス" Then 'メルアドを取得 meruado = Sheets("sheet2").Range("A" & cnt).Value cnt = cnt + 1 'メルアドから下の行を本文として取得 honbun = "" Do honbun = honbun & Sheets("sheet2").Range("A" & cnt).Value honbun = honbun & "%0a" cnt = cnt + 1 Loop Until Sheets("sheet2").Range("I" & cnt - 1).Value = "エンド" '文字数カウント a = Len(honbun) 'メール作成 sPath = """C:\Program Files\Mozilla Thunderbird\thunderbird.exe"" -compose " Mailad = meruado Subjct = Sheets("説明").Range("A7").Value Bodyst = honbun Shell sPath & "to=" & Mailad & "," & _ "subject=""" & Subjct & """," & _ "body=""" & Bodyst & """" Else cnt = cnt + 1 End If Loop で、質問なんですが、 'メルアドから下の行を本文として取得 honbun = "" Do honbun = honbun & Sheets("sheet2").Range("A" & cnt).Value honbun = honbun & "%0a" cnt = cnt + 1 Loop Until Sheets("sheet2").Range("I" & cnt - 1).Value = "エンド" 上記の部分で本文を作っていくときに、本文中に「,」が入っていると、そこで本文が途切れてしまいます。 例えば、A2セルに「りんご」A3セルに「みかん」とある場合、変数honbunは「りんご%0aみかん」となり メール本文は「りんご(改行)みかん」となりますが、A2セルが「りんご」A3セルが「み,かん」の場合 メール本文が「りんご(改行)み」で終わってしまいます。 正規表現?的な文字が入っていると、メーラーのbodyに渡す時に途切れちゃうのかなという感じです。 変数honbunに入っている文字列はすべてただの文字列とし、上記の例の場合にメールが途中で 途切れないようにする方法はありますでしょうか?

  • sleipnirのメール設定

    私は、ブラウザではsleipnirを、メーラーではthunderbirdを主に使っています。 sleipnirのメニューから、「リンクの送信」を選択し、thunderbirdのメールの新規作成を呼び出すと、件名、本文が全て???…と?しか表示されません。 sleipnirオプションは、「ユーザー指定の~」にチェックを入れ、パスも、~\thunderbird.exe、引数も、自分のアドレス(gmail)を入力してあります。 メニューからの、「メールの新規作成」や、「メールを読む」もちゃんとできています。 解説のサイトも検索してみたのですが、なかなか見つからず困っております。 初心者にも分かりやすい回答を、どうか宜しくお願いします。

  • 【Excel】VBAでメール作成

     毎日、Excel2003を利用してデータ入力をした後、内容をコピー&ペーストをしてOutlook2003でメールを作成する作業を行っております。量が多い為、大変時間がかかってしまっているので効率化を図りたく、この作業をマクロ(VBA)でコマンドボタンをクリックしたら、規定のセル内のデータがメールに記載され、あとは送信を押すだけにしたいと思っております。 例えば… セルA1に○○様と本文の頭になる文字 セルB1に本文 セルC1にTO セルD1にBCC セルE1に件名

  • 携帯の迷惑メールの自動受信

    AUの携帯電話を使っています。 迷惑メール対策にメールフィルターを利用し、なんとか減らしています。 メール受信方法は、差出人・件名受信にしています。 しかし今日、上記の通り差出人・件名をしているのに、自動的に迷惑メールが受信されてしまいました。 これでは削除してもパケット代がかかってしまうと思います。 送信元アドレス(From)はdocomoで、送信先(To)はわたしのアドレスに近いもので、わたしのアドレスではありませんでした。 本文はありませんでした。 自分のPCへ転送しましたが、不可解な手がかりは得られませんでした。 過去の質問などから、アドレスを自分のメールになりすますプログラムについては知っています。 では、携帯の設定を無視して強制的に受信させるプログラムもPCでは作られているのでしょうか?? PCや迷惑メールに詳しい方がいらっしゃいましたら教えていただきたいです。

  • shell 変数について

    お世話になっております。 たびたびすみません。 shellプログラミングで質問です。 以下のようなプログラムを作成したところ、 引数に2147483648以上の数値を与えて実行すると 変数に代入される値が-マイナスとなり、 おかしくなってしまいます。 シェル変数の上限は2147483647なのでしょうか? だとしたら、これ以上の数値を代入することはできないのでしょうか。 お手数ですが、よろしくお願いいたします。 #!bin/sh firstno=$1 echo "do you make a file?(y/n)" read ans if [ $ans = "y" ]; then sed -e 's/AAA/aaa/' aaa.csv >> aaaaaa.csv firstno=`expr $firstno + 1` echo "next no is \"$firstno\"" fi

  • thunderbirdでメールを作成するとき

    Windows10でWindows Live Mailからthunderbirdに代え、今日から使い始めました。 thunderbirdではメールを作成するときに[作成]をクリックし、作成画面を出し、 [宛先]欄にはメールアドレスを記入するようになっていますが、せっかくアドレス帳に 名前、アドレスがあるのですから、これを利用する方法はないのでしょうか?

  • メールの返信の件名について

    受信したメールに返信するには「返信」ボタンをクリックすれば自動的に返信メール作成の画面が開き、相手のメールアドレスも件名も自動的に入力されますのでメールの本文を入力するだけで返信できるのですが、私の兄は返信のメールの件名を手動で入力しその文頭に「Re」を付けて返信メールを送信しています。これっておかしいと思うのですが皆さんはどう思われますか。自動的に作成される件名に納得できないのであればよりふさわしい件名にするのは何らおかしくありませんが、その新しい件名に「Re」を付ける必要があるのでしょうか。

  • エクセルからメール作成

    エクセルの関数を使ってメールを作成する方法について教えて下さい。 =HYPERLINK("mailto:"&A1"?cc="&A2&"; "&A3&"&subject="&A4&"&body="&A5,"セルの名称") にて指定したセルとクリックするとメールアドレス(to、cc)と件名、本文が入ったメールが作成されました。 ただ、本文(A5)が改行されず表示されます。 セルが分かれてもいいですので、改行する方法を教えて頂けますでしょうか? 【イメージ】 A5(改行) (改行) A6(改行) ・・・

  • VBAでメールにアクティブブックを添付したい

    EXCEL2003を使用しています。 ・アクティブブックを保存し、メールに添付 ・送信先アドレス、件名を指定 ということをVBAで行ないたいです。 調べてみた所、メール送信に関するVBAの記述としては「SendMailメソッド」を使えばいいらしいのですが、こちらは送信まで行なってしまうようです。 でも今回の場合は自動送信ではなく、上記の通り送信の直前で止めたいのです。 (本文記述と送信ボタン押下は手動) できればメニューの[ファイル]-[送信]機能ではなく、VBAで処理したいのですが…どうすればいいのでしょうか。

  • Thunderbird 迷惑メール設定

    迷惑メールで、「件名 本文 送信者 宛て先」等なにも、記載されたいないメールがよくきます。Thunderbirdで迷惑メール拒否の設定をしてますが、 なかなか上手く、振り分けられません。特別な設定があるのでしょうか?