[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.