ここから本文です

VBAでスペシャルホルダーの記述について

アバター

ID非公開さん

2017/5/2717:20:18

VBAでスペシャルホルダーの記述について

下記のVBAコードは一部分ですが、数台でのパソコンで利用を考えており、下記の問題に直面しております。


C:\デスクトップ・・というパスもあれば
C:\DESKTOP・・というパスもあり、色々調べますとSpecialホルダーという便利なパスで利用できるというところまでは調べたのですが、コードそのまま引用しても利用できず困っております。
<スペシャルホルダー利用前のコード>
oItem.Attachments.Add "C:\デスクトップ\あいう.xlsx"
<スペシャルホルダーネット引用後のコード>
Dim myPath As String
Dim i As String

oItem.Attachments.Add "myPath =
CreateObject("Wscript.Shell").SpecialFolders("Desktop") & "\"
i = "あいう.xlsx"

ご存知の方、ご教示いただけませんでしょうか?

よろしくお願いします。

閲覧数:
46
回答数:
2

違反報告

ベストアンサーに選ばれた回答

k_w********さん

2017/5/2718:08:56

myPath =CreateObject("Wscript.Shell").SpecialFolders("Desktop") & "\あいう.xlsx"

oItem.Attachments.Add myPath

とは違うでしょうか?

アバター

質問した人からのコメント

2017/6/2 20:18:12

ありがとうございます いけました!
本当に助かりました!

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

lin********さん

2017/5/2721:00:42

oItem.Attachments.Add "myPath = CreateObject("Wscript.Shell").SpecialFolders("Desktop") & "\"
i = "あいう.xlsx"

まず、「myPath」の前に「"」があるのが間違いです。

これは多分、参考にされたサイトで

oItem.Attachments.Add "D:\Programming\abc.xlsx"

などと、記述してあったので、付けてしまわれたのだと推察します。

「myPath」は変数ですが、「"myPath"」としたとたん、「myPath」という「文字列」になってしまいます。

変数の前後に「"」が付くことはあり得ません。

付く場合は、「myPath & "\"~」や「myPath = "D:\~」のような場合で、それでも、直接、変数に「"」が付くことはありません。

MsgBox("myPath = " & myPath)

これは、画面に「myPath = 」という文字の横に、「myPath」の値(例えば「D:\Programming」を表示させるものです。

MyPath = D:\Programming

と表示されるわけです。

したがって、されたいことをするには、

myPath = CreateObject("Wscript.Shell").SpecialFolders("Desktop") & "\"

という1行を、マクロの上の方に書いておいて(どうやら「For i =~」があるみたいなので、その「For i =」よりも上の行です)、

oItem.Attachments.Add myPath & "あいう.xlsx"

と記述します。

分からないのは、「i = 」です。

たぶん、「For i = 1 to ~」があるのでしょう。

しかし、ここでの「i = "あいう.xlsx"」という記述の意味は、「i」の中に「あいうえお.xlsx」という文字列を代入しなさい、という意味です。

プログラム言語では、「=」は、「If」のような条件判断の場合以外は、「等しい」ではなく、「=」の左側(左辺)を右側(右辺)に代入する、です。

そのため

x = 2
x = x + 1

というような、数学的にはあり得ない式が出てきます。

これは、最初「x」の値は「2」です。

しかし、数学的に「x」と「2」が「等しい」と言っているのでは決してありません。

「x」の中に「2」を入れているのです。

右から左ですから、「x = x +1」も最初「x + 1」をプログラムは調べます、今「x」は、「2」ですから「2 + 1」で、「3」になり、その「3」が、左の「x」に入ります。

したがって、「2 = x」などという記述は、プログラムではあり得ません(上述のとおり、「If 2 = x Then」のような条件判断の場合は除きます)。

今、多分、「i」は「1」~いくつまでか知りませんが、変化しています(「For i =~」。

その「i」に「あいうえお.xlsx」を代入する、ということは絶対にあり得ません。

もしかしたら「i」の変化に合わせて、「1あいう.xlsx」、「2あいう.xlsx」とおやりになりたいのかも知れませんが、それなら「i & "あいうえお.xlsx」です。

まとめますと、

Set ol = CreateObject("Outlook.Application")
myPath = CreateObject("Wscript.Shell").SpecialFolders("Desktop") & "\"
For i = 1 to 9
Set oItem = ol.CreateItem(0)
oItem.To = Cells(i, 1).Value
oItem.Subject = Cells(i, 2).Value
oItem.Body = Cells(i, 3).Value
oItem.Attachments.Add myPath i & "あいう.xlsx"
oItem.Send
Next i

というようなことをされたいのだと思います。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる