Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Home Premium : Excel 2010)
変数とダブルクオーテーションの使い方
投稿日時: 21/10/26 20:13:09
投稿者: shimoichimabu

ThunderBird(メイルソフト)はインストールしていませんが、知人からThunderBirdの起動のコードについて聞かれました。
 
セルA1に
  C:\Program Files\Mozilla Thunderbird\thunderbird.exe
を記載しています。
 
下記の通り、ThunderBirdを起動するコードを書きました。
 
Dim mailTo As String, mailSub As String, mailBody As String, 添付File As String
 
 tbPath = """" & Range("A1").Value & """ -compose """
 
  mailTo = Range("A2").Value
 
  mailSub = Range("A3").Value
 
  mailBody = Range("A4").Value
 
  添付File = Range("A5").Value
 
  Shell tbPath & _
    "to=" & mailTo & "," & "subject=""" & mailSubj & """," & "body=""" & mailBody & """," & "attachment=""" & 添付File & """"
 
変数とダブルクオーテーションの使い方がどうも自信がありません。
ダブルクオーテーションの数が正しいか・・・。かなり複雑です。

回答
投稿日時: 21/10/26 23:11:11
投稿者: simple

Dim s As String
s =  tbPath & _
    "to=" & mailTo & "," & "subject=""" & mailSubj & """," & "body=""" & mailBody & """," & "attachment=""" & 添付File & """"
Debug.Print s
として確認してみてはどうですか?
 
私のところにもその環境はないので確かなことは言えませんが、
そうした確認は質問者さんのところで、まず実行すべきことではないのですか?

回答
投稿日時: 21/10/26 23:15:18
投稿者: WinArrow
投稿者のウェブサイトに移動

VBAでは、「"」ダブルクォーテーションを文字列として
扱う場合は、「""」のように記述する文法になっています。
長いセンテンスになると、紛らわしいですね・・・・
 
Chr(34)に置き換えると分かりやすくなります。(長くなるのが欠点)
 
例。対の2つは、同じことです。
    Debug.Print "AAA""BBB""CCC"
    Debug.Print "AAA" & Chr(34) & "BBB" & Chr(34) & "CCC"

回答
投稿日時: 21/10/27 10:17:50
投稿者: hatena
投稿者のウェブサイトに移動

文字列のなかのダブルクォーテーションは確かに見にくいです。
別の文字(例えばシングルクォーテーション)に置き換えて入力して、
Replaceで変換する方法をよく使います。
 

Debug.Print Replace("AAA'BBB'CCC", "'", Chr(34))

 
途中で変数が入るときも、
 
X="HOGEE"
Y="FUGA"

Debug.Print "AAA""" & X & """BBB""" & Y & """CCC"""
'結果 AAA"HOGE"BBB"FUGA"CCC

 
と見づらくなりますので、下記のようにしたりします。
 
X="HOGEHOGE"
Y="FUGAFUGA"
S="AAA'{X}'BBB'{Y}'CCC"

Debug.Print Replace(Replace(Replace(s,"'",Chr(34)),"{X}",X),"{Y}",Y)
'結果 AAA"HOGE"BBB"FUGA"CCC

 

投稿日時: 21/10/27 22:14:44
投稿者: shimoichimabu

simpleさん、 WinArrowさん、hatenaさん回答ありがとうございます。
 
tbPath = """" & Range("A1").Value & """ -compose """
 
s = tbPath & _
    "to=" & mailTo & "," & "subject=""" & mailSub & """," & "body=""" & mailBody & """," & "attachment=""" & 添付File & """"
     
Debug.Print s
 
   ↓
 
"C:\Program Files\Mozilla Thunderbird\thunderbird.exe" -compose "to=mMail@xxx.co.jp,subject="TEST",body="OKです。",attachment="C\TEST.xlsx"
 
という表示になりました。
 ただ、" -compose " はダブルクオーテーション付いてもいいでしようか?
mMail@xxx.co.jp は "mMail@xxx.co.jp" の表示になっていないが、間違い?
 
Shell関数でThunderBird を起動する際、ダブルクオーテーションの付け方があまり理解できていません。上記のダブルクオーテーションの付け方で宜しいでしようか?
 
Chr(34)、Replaceで変換する方法を提示して頂いたのですが、力不足で、それを使うこころまでいっていません。

回答
投稿日時: 21/10/28 16:27:24
投稿者: simple

引用:
"C:\Program Files\Mozilla Thunderbird\thunderbird.exe" -compose "to=mMail@xxx.co.jp,subject="TEST",body="OKです。",attachment="C\TEST.xlsx"
  
という表示になりました。
 ただ、" -compose " はダブルクオーテーション付いてもいいでしようか?
mMail@xxx.co.jp は "mMail@xxx.co.jp" の表示になっていないが、間違い?

おっしゃる意味がわかりませんでした。
thunderbird.exeというプログラムの実行をその文字列を使ってやろうとされているんですよね。
そのexeファイルのパスには空白を含むので、" で囲っているわけですね。
-composeは囲っていないように見えます。対応関係をよく観察されては。
 
また、全体として、"と"の数が一致していないですし、対応づけができていないようにみえます。
toだけ指定するという簡単なものから、徐々に広げていったらどうでしょうか。
私はthunderbirdを使ったこともないのでよくわかりません。以上とさせてください。
 

投稿日時: 21/10/29 16:12:30
投稿者: shimoichimabu

simpleさん、ご助言ありがとうございます。
 
>対応関係をよく観察されては。
 >また、全体として、"と"の数が一致していないですし、対応づけができていないようにみえます。
>toだけ指定するという簡単なものから、徐々に広げていったらどうでしょうか。
 
もう少し、じっくりと考えてみます。
いろいろ、調べてみましたが、何となく、Shell関数を使ってアプリを起動するコードが
見えてきました。