[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『outlookのメール本文にセルの内容を貼り付けたい』(まー)
WindowsXP,Excel2007
セルC3からC13までの内容を、メールの本文に貼り付けたいのですが
objMAIL.Body = Range("C3")では、C3の内容が貼り付けられているのですが
objMAIL.Body = Range("C3:C13")では、何も貼り付けられずにいます。
初歩的な質問ですが、セルC3からC13までの内容を本文に貼り付ける場合 どうしたらいいでしょうか?
もう一つ質問になってしまいますが
Set oApp = CreateObject("Outlook.Application")を利用しています。
既に、outlookが起動している場合でもマクロを実行すると、outlookが
起動していまいます。これを解消するにはどうしたらいいでしょうか?
ご教授よろしくお願いします。
エラー処理を使ってOutLookの起動の有無をチェックします。 GetObject を使っても出来るはずですが、私のPCではなぜかエラーに なってしまうのでエラー処理を使う方法をご提示します。 ※参照設定をしない方法です。 '表示するフォルダの番号はOutLookのオブジェクトブラウザなどで 確認してご希望のものに変えてください。
Sub test()
Dim myOlApp As Object
Dim myfolder As Object
On Error Resume Next
Err.Clear
Set myOlApp = GetObject(, "Outlook.Application")
If Err.Number = 429 Then
Set myOlApp = CreateObject("Outlook.Application")
Set myfolder = myOlApp.GetNamespace("MAPI").GetDefaultFolder(6) '6は受信トレイ
AppActivate myOlApp.Application
myfolder.Display
Set myOlApp = Nothing
Set myfolder = Nothing
End If
On Error GoTo 0
End Sub
単一のセルを指定したら、プロパティを尚楽してもエクセルは ○.Value だろうと判断し セルの値を取得できますが、複数のセルを指定した場合は 単にRangeオブジェクトの配列になってしまいます。
配列をループし文字列変数に取り込んでやる必要があります。 参考スレッドです。
『セル1個ごとに改行したテキスト保存』(たまみ)
(カリーニン)
ご指導通り、OutLookの多重起動は改善されました、どうもうありがとうございました。
もうひとつの、Rangeオブジェクトの配列についてですが 参考スレッドを拝見しましたが、完全に理解出来ず・・・ 難航しております。 引き続き、こちらを教えていただけると助かります。
C3からC13までに入力されたセルの内容を、メール本文に貼り付ける
よろしくお願いします。
リンク先は今回の質問とは少し(大きく?)違いましたね。失礼しました。
↓は選択セル範囲の内容をTabと改行を挟んで文字列化します。
Sub testA()
Dim r As Range
Dim c As Range
Dim celstr As String
Dim kairetustr As String
Dim kaigyoustr As String
'セルが選択されていなかったら(シェイプなどが選択されていたら)終了
If TypeName(Selection) <> "Range" Then Exit Sub
'選択セルを変数rにセット
Set r = Selection
'文字列変数「celstr」の初期化
celstr = vbNullString
'選択セルが1セルなら
If r.Cells.Count = 1 Then
celstr = r.Value
'選択セルが複数セルなら(複数エリアの場合は考慮してません)
Else
'改列部分に挟む文字(改列文字列)
kairetustr = vbTab
'改行部分に挟む文字(改行文字列)
kaigyoustr = vbCrLf
For Each c In r
'「celstr」に何か代入されていて、かつ、cが選択セル範囲の一番左の列なら「celstr」の末尾に改「行」文字列を付加
If celstr <> "" And c.Column = r.Resize(1, 1).Column Then celstr = celstr & kaigyoustr
'cが選択セル範囲の一番左の列以外なら「celstr」の末尾に改「列」文字列を付加
If c.Column <> r.Resize(1, 1).Column Then celstr = celstr & kairetustr
'「celstr」の末尾にcの内容を付加
celstr = celstr & c.Value
Next c
End If
MsgBox celstr
Set r = Nothing
End Sub
セル範囲に選択セルではなくセル範囲を指定するなら
Set r = Selection
を
Set r = ThisWorkbook.Worksheets(1).Range(ThisWorkbook.Worksheets(1).Cells(1, 3), ThisWorkbook.Worksheets(1).Cells(4, 3))
のように適宜変えてください。
指定の文字列をメールの本文に転記する方法です。↑のコードと組合わせてみてください。
Sub testB()
Dim myOlApp As Object
Dim myfolder As Object
Dim objMAIL As Object
Dim strTo As String
Dim strCc As String
Dim strSubject As String
Dim strBody As String
On Error Resume Next
Err.Clear
Set myOlApp = GetObject(, "Outlook.Application")
If Err.Number = 429 Then
Set myOlApp = CreateObject("Outlook.Application")
Set myfolder = myOlApp.GetNamespace("MAPI").GetDefaultFolder(4) '4は送信トレイ
AppActivate myOlApp.Application
Set objMAIL = myOlApp.CreateItem(0)
strTo = "atesaki@gakkou"
strCc = ""
strSubject = "hogeratta"
strBody = "aa" & vbTab & "bb" & vbCrLf & "cc" & vbTab & "dd"
objMAIL.To = strTo
objMAIL.Cc = strCc
objMAIL.Subject = strSubject
objMAIL.body = strBody
myfolder.display
objMAIL.display
Set objMAIL = Nothing
Set myOlApp = Nothing
End If
On Error GoTo 0
End Sub
(カリーニン)
カリーニンさんありがとうございます。 教えて頂いたコードを組み込んで、なんとかエラーも出ずできました。 本当にありがとうございました。
ひとつ忘れていたのが、C列以外にB列に0と1を割り振っており フィルタ機能で、0の行を非表示にしてURLだけを貼り付けていました。
B列 C列 0 aaaaa 1 URL 0 bbbbb 1 URL 0 CCCCC 1 URL
教えて頂いたコードでは選択したセルの内容を配列に格納しまっており 上記の例えであれば、フィルタで0の行を非表示にしても、しなくても、C列すべてが メール本文に張り付いてしまいます。 この点を改善できないでしょうか?
オートフィルタの結果の可視セルのみを対称にすればお望みのことが可能です。 「オートフィルタ 可視セル」 などで検索してみてください。 たくさん事例がヒットするとおもいます。
↓でも同じような質問されてますね。 田吾作さんからご回答がついてますのできちんと対処されてください。
[[20110529220102]] 『Rangeでの配列』(まー)
>教えて頂いたコードでは選択したセルの内容を配列に格納しまっており 私の2回目のレスのコードでは配列は使用していません。 内容をご確認ください。そして理解してください。 (カリーニン)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.