2016-06-22 6 views
0

Outlookでメールを送信しているときに、私が作業中のアクティブワークブックをどのように変換できますか? このコードには添付ファイル.xlsxファイルがありますが、テキストで入力したいのですが、どうすれば変更できますか? おかげVBAをExcelに変換して、メールをOutlookに送信するときに

'send mail code 
       Set ol = New Outlook.Application 
       Set olmail = ol.CreateItem(olMailItem) 
       With olmail 
        .To = "[email protected]" 
        .Subject = objetText 
        .Body = "testing" 
        .Send 

       .attachments.Add activeworkbook.fullname 
       End With 
      End sub 
+0

正確に何を望みますか?ワークブックには複数のワークシートを含めることができます。では、これらのワークシートをどのようにテキストで表現するのでしょうか?また、1つのワークシート内の範囲のみを意味する場合、この範囲はどのようにテキストで表されるのですか?または、リッチテキストテーブルとして表される範囲を意味しますか? –

+0

このワークブックはちょうど1つのワークシートを持っていて、数字と名前だけなので、エクセルをtxtに変換して、他の人がテキストファイル@AxelRichterからこれらの情報を受け取れるようにします。 – JeanLo

答えて

0

は、あなただけのテキストに1つのワークシートを変換することができますので、私は、これはあなたが達成しようとしているものであると仮定しています。新しいワークブックにシートをコピーします(あなたがXLSMとして現在のブックで作業を続けることができます)、テキストとして、あなたはMSでattachments.add

Dim wbkthis As Workbook 
Dim wbkNew As Workbook 

Set wbkthis = ActiveWorkbook 
'So we can come back here 
Set wbkNew = Workbooks.Add 
'New book to copy sheet to 

wbkthis.Sheets("relevantsheetname").Copy Before:=wbkNew.Sheets(1) 

Application.DisplayAlerts = False 
'Supress overwrite and close alerts, you may not want this 

wbkNew.SaveAs "savelocation\Mybookname.txt", xlText 
'use this same string with your attachments.add code 
wbkNew.Close 

Application.DisplayAlerts = True 
wbkthis.Activate ' Go back to original file 
1

のために使用している文字列の保存場所を使用することを保存しますOfficeの場合、Excelのセル範囲をクリップボードにコピーし、そのメール本文がリッチテキスト形式で、Wordエディタを使用している場合は、これをOutlookメール本体に貼り付けることができます。この処理の間、セル範囲はリッチテキストテーブルに変換されます。

これは、コードによって達成することができます。

Sub emailer() 

Set oOlApp = CreateObject("Outlook.Application") 

olMailItem = 0 
Set oOlMItem = oOlApp.CreateItem(olMailItem) 

'get Excel cell range which shall be in the mail 
Set oWB = ActiveWorkbook 
Set oWS = ActiveWorkbook.Worksheets(1) 
Set oRange = oWS.Range("A1:C10") 

oRange.Copy ' Range is now in Clipboard 

With oOlMItem 

    .Display 

    .To = "[email protected]" 
    .Subject = "Subject" 

    Set oOlInsp = .GetInspector 
    Set oWdDoc = oOlInsp.WordEditor ' get Word Document from the MailBody 

    olFormatRichText = 3 
    .BodyFormat = olFormatRichText ' change to RichTextFormat 

    Set oWdRng = oWdDoc.Paragraphs(oWdDoc.Paragraphs.Count).Range 
    oWdRng.InsertBefore "This is before the Excel table." 
    oWdRng.InsertParagraphAfter 
    oWdRng.InsertParagraphAfter 

    Set oWdRng = oWdDoc.Paragraphs(oWdDoc.Paragraphs.Count).Range 
    oWdRng.Paste ' paste Excel range from Clipboard 

    oWdRng.InsertParagraphAfter 

    Set oWdRng = oWdDoc.Paragraphs(oWdDoc.Paragraphs.Count).Range 
    oWdRng.InsertBefore "This is after the Excel table." 


End With 

Application.CutCopyMode = False 

End Sub 
+0

おかげさまで、 Set oWdContent = oWdDoc.Content、エラー91オブジェクト変数またはWithブロック変数が設定されていない(エラー91)、何が問題なのですか? – JeanLo

+0

申し訳ありません、再現できません。 Office 2007と2016で動作します。しかし、 'Set oWdContent = oWdDoc.Content'という行はアーティファクトであり、必要ではありません。さらに、Outlookが既に開かれていなくても機能するように、コードを更新しました。 Outlookが常に開かれて以来、私はこれを試していませんでした。しかし、そうでない場合は、少なくとも1つのOutlookウィンドウが表示されている場合にのみコードが正しく動作します。これでコードはメールアイテムを最初に表示し続けます。 –

0

私はアクセルの答えは何が必要でしょうであることを確信していますが、テキストにそれに変換してそれを置くことについて尋ねられたことから、これはそれを行います。フォーマットはひどく見えます。 (VBEで)ツール/参照に入り、Microsoft Forms 2.0 Object Libraryの横にチェックを入れてください。

Dim ws As Worksheet 
Dim DataObj As MSForms.DataObject 
Set DataObj = New MSForms.DataObject 
Set ws = ActiveWorkbook.ActiveSheet 
    ws.UsedRange.Copy 
DataObj.GetFromClipboard 
strbody = DataObj.GetText(1) 

With NewMail 
    .SUBJECT = "Test Mail" 
    .From = """Sender"" <[email protected]>" 
    .To = "[email protected]ail.com" 
    .CC = "" 
    .BCC = "" 
    .TextBody = strbody 
End With 
+0

ありがとうございました! – JeanLo

関連する問題