プロが教える店舗&オフィスのセキュリティ対策術

Excelのセルを選択することでコピー&ペーストを
OutlookVBAでやりたいです。

コピーするExcelのセルには文字列しか入っていません。
手動でやるとできますが、OutlookVBAで実行してみたいです。

クリップボードなどの言葉でググっても見つかりませんでした。

ご存知の方、教えてください。

A 回答 (4件)

こんばんは


>Excelのコピーした文字を件名に
件名だけ、、試しにと言う事でしょうか
流石に件名だけでは無いでしょうから、
既に回答にある通りCreateObjectでExcelを参照すればExcelVBAのような
操作が可能と思います
(WordEditorを使用した方が良い場合もあります。その場合はWord)

拡大解釈のサンプルですが

Sub AddMailItem()
Dim objMailItem As MailItem
Dim oExlApp As Object, xAry As Variant
Dim xWb As Object, xWs As Object
Dim File_Path As String
Set oExlApp = CreateObject("Excel.Application")
Dim opnFile As Variant
opnFile = oExlApp.GetOpenFileName("Excelファイル(*.xls*),*.xls*")
If VarType(opnFile) = vbBoolean Then Exit Sub
Set xWb = oExlApp.Workbooks.Open(opnFile)
Set xWs = xWb.Sheets(1)
xWs.Activate
oExlApp.Visible = True
xAry = xWs.Range("A1:C1")
oExlApp.Quit
'本文を同じフォルダの同名テキストファイルから取得(文字コード注意
File_Path = Replace(opnFile, Mid(opnFile, InStrRev(opnFile, ".")), ".txt")
Set objMailItem = CreateItem(olMailItem)
With objMailItem
.To = xAry(1, 1)
.CC = xAry(1, 2)
.BCC = ""
.Subject = xAry(1, 3)
.BodyFormat = 1 '1:テキスト、2:HTML、3:リッチテキスト
.Body = In_Txt(File_Path)
.Attachments.Add (opnFile)
.Display
' .Send
End With
End Sub

Public Function In_Txt(File_Path As String)
Dim fn As Integer
Dim rcd As String
Dim strIn As String
fn = FreeFile
Open File_Path For Input As fn
Do Until EOF(fn)
Line Input #fn, rcd
strIn = strIn & rcd & vbCrLf
Loop
Close fn
In_Txt = strIn
End Function


ExcelはExcel.ApplicationのGetOpenFileNameを使用して取得しています
A1:C1の各セルの値を配列に入れてExcelを閉じた後に使用しています
本文は、ブック名と同じテキストファイルから取得しています

同じフォルダにブックとブックと同じ名前のテキストファイルを用意して
ブックのインデックス1のシートのA1:C1セルに値を入れ
テキストファイルに本文を入れて準備します。
テキストファイルの保存文字コードは文字化けなどを確認して保存してください
VBA実行でExcelブックを指定して開くとメールが作成されます。

参考程度で不要部分などを削除や改変してみてください。
    • good
    • 0

こんにちは



セルの値が取得できれば良いものと解釈しました。

>OutlookVBAで実行してみたいです。
エクセルのアプリケーションオブジェクトを生成すれば、あとは通常のエクセルVBAと同様に処理できます。
 ・アプリケーションの生成
 ・対象ブックを開く
 ・セルの値をコピー
といった手順になろうかと思います。

一方で、もしも参照セルが一ヶ所だけなら、わざわざブックを開かなくても直接取得が可能です。
こちらの方が、ブックを開かないですむ分、若干速いと思われます。
ただし、参照したいセル数が多い場合には、前記の手順の方が良いでしょう。

以下に、直接取得する場合の簡単な例をご参考までに。
※ 「test.xlsx の Sheet1 B3」セルの値を取得する例です。
(ブックのパス、シート名、セル位置(=R1C1形式)で指定する必要があります)

Dim oExl, v

Const p = "'C:\Users\hoge\[test.xlsx]Sheet1'!R3C2"
Set oExl = CreateObject("Excel.Application")
v = oExl.ExecuteExcel4Macro(p)
oExl.Quit

MsgBox v
    • good
    • 0

No.1のものです。



>OutlookVBAでExcelのデータをコピー、
メールの件名に貼り付けたいんです。

すみませんが、コピーしないとダメなのでしょうか?
コピー状態で、マクロからはメールに貼り付けるところからとか?

もう少し、詳細を教えて貰えると、良い回答ができるかも知れません。

因みに、クリップボード関係ですと、下記が参考になるでしょうか?
https://www.moug.net/tech/exvba/0150091.html
    • good
    • 0

こんにちは。



Excel VBA メール送信で検索されると、出て来るかと思います。

下記、一例ですが、セルに入っている文字を、Outlookのメールに
入れる様な内容かと。

https://fastclassinfo.com/entry/vba_outlook_send …

下記、上記リンクからのコピーですが。

'プログラム5|メール情報を設定
mymail.BodyFormat = 3 'リッチテキストに変更
mymail.To = ws.Range("B2").Value 'To宛先
mymail.CC = ws.Range("B3").Value 'cc宛先
mymail.BCC = ws.Range("B4").Value 'bcc宛先
mymail.subject = ws.Range("B5").Value '件名

'プログラム6|メール本文を設定
Dim mailbody As String, credit As String
mailbody = ws.Range("B6").Value
credit = ws.Range("B7").Value
mymail.Body = mailbody & vbCrLf & vbCrLf & credit
    • good
    • 0
この回答へのお礼

Excelのデータを張り付けるのは確かですが、
OutlookVBAでExcelのデータをコピー、
メールの件名に貼り付けたいんです。

お礼日時:2022/02/03 14:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!