[[20110525000008]] 『outlookのメール本文にセルの内容を貼り付けたい』(まー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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オブジェクトの配列になってしまいます。

 配列をループし文字列変数に取り込んでやる必要があります。
 参考スレッドです。

[[20110301193551]]

 『セル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.