2012-04-28 11 views
9

これは、VBAを使用して電子メールを送信することに関するいくつかのメッセージです。 DLLまたは何かを追加するために私が必要となりますVBAを使用して電子メールを送信する場合のフォローアップ

Set appOL = CreateObject("Outlook.Application") 

Set msgOne = CreateObject("CDO.Message") 

Set mapi_session = New MSMAPI.MAPISession 

しかし、どうやらOutlookが私たちのワークグループのセキュリティ設定を変更するために私が必要となり、CDOとMAPI:

ほとんどの提案は、Outlook、CDO、またはMAPIのいずれかを使用します。

Excelを使用して仕事中のグループ割り当てを整理しようとしていますが、他の人のコンピュータを変更することはできません。

Excelマクロから電子メールを送信する簡単な方法はありますか?
メッセージの本文に添付ファイルのないテキストブロックが必要です。

私はGoogle、MSDN & StackOverflowを一周していますが、私は遅いボートでどこにも行きません。

答えて

5

おそらくShellコマンドを使用できます。

Shell("mailto:[email protected]") 

Outlookが既定の電子メールプログラムであれば、私は窓が(それがVBAからダイアログをRUN窓からそれをしないが、もしわからない)が正しくそれを解釈すると思います。やってみて。私は現時点ではExcelの前にいません。

「mailto」のパラメータを確認して、その文字列に件名と本文を追加する方法を確認してください。

修正: これは電子メールを生成するだけですが、送信しません。私の答えは無視してください。

+0

「私の答えを無視してください。」+ 1 :-)正しい軌道に乗っていました。 –

+0

@SiddharthRout、最近、SiddarthのこれらのExcelの質問で多くのことをお会いしています。よくできました! – Marc

+0

いつも良い質問をしています;) –

9

マークアップは、ここにはが試してみたバージョンです。詳細について

Option Explicit 

Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _ 
ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, _ 
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long 

Sub SendMail() 
    Dim objMail As String 
    Dim oMailSubj, oMailTo, oMailBody As String 

    On Error GoTo Whoa 

    oMailSubj = "YOUR SUBJECT GOES HERE" 
    oMailTo = "[email protected]" 
    oMailBody = "BLAH BLAH!!!!" 
    objMail = "mailto:" & oMailTo & "?subject=" & oMailSubj & "&body=" & oMailBody 

    ShellExecute 0, vbNullString, objMail, vbNullString, vbNullString, vbNormalFocus 

    Application.Wait (Now + TimeValue("0:00:03")) 
    Application.SendKeys "%s" 

    Exit Sub 
Whoa: 
    MsgBox Err.Description 
End Sub 

フォロー

感謝。私はすでにShellExecuteを除外していました。なぜなら、それはパラメータ文字列全体を250文字に制限し、メッセージには約2000が必要なためです。しかし、SEが私の場合に実際に動作する唯一のオプションであるように見えます。 - Humanoid1000 7時間前

ここで「恐ろしい(私はJFCが!!!と言う方法愛)」私は美しく、作品コメントで下記:)ところで、私は持っている方法です私のデフォルトのクライアントとしてのOutlookだけだから、私はそれを使ってそれをテストしました。それが送信される直前に

enter image description here

メールをメッセージがあり

CODE

Option Explicit 

Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _ 
ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, _ 
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long 

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 

Sub SendMail() 
    Dim objMail As String 
    Dim oMailSubj As String, oMailTo As String 
    Dim i As Long 
    Dim objDoc As Object, objSel As Object, objOutlook As Object 
    Dim MyData As String, strData() As String 

    On Error GoTo Whoa 

    '~~> Open the txt file which has the body text and read it in one go 
    Open "C:\Users\Siddharth Rout\Desktop\Sample.Txt" For Binary As #1 
    MyData = Space$(LOF(1)) 
    Get #1, , MyData 
    Close #1 
    strData() = Split(MyData, vbCrLf) 

    Sleep 300 

    oMailSubj = "YOUR SUBJECT GOES HERE" 
    oMailTo = "[email protected]" 
    objMail = "mailto:" & oMailTo & "?subject=" & oMailSubj 

    ShellExecute 0, vbNullString, objMail, vbNullString, vbNullString, vbNormalFocus 

    Sleep 300 

    Set objOutlook = GetObject(, "Outlook.Application") 
    '~~> Get a Word.Selection from the open Outlook item 
    Set objDoc = objOutlook.ActiveInspector.WordEditor 
    Set objSel = objDoc.Windows(1).Selection 

    objDoc.Activate 

    Sleep 300 

    For i = LBound(strData) To UBound(strData) 
     objSel.TypeText strData(i) 
     objSel.TypeText vbNewLine 
    Next i 

    Set objDoc = Nothing 
    Set objSel = Nothing 

    '~~> Uncomment the below to actually send the email 
    'Application.Wait (Now + TimeValue("0:00:03")) 
    'Application.SendKeys "%s" 

    Exit Sub 
Whoa: 
    MsgBox Err.Description 
End Sub 

SNAPSHOT

テキストファイル

ここ

enter image description here

+0

体長の制限としてmailtoプロトコルをよく覚えていれば。 (512文字以下)。私が間違っているなら、私を訂正してください。 – Steve

+0

情報ありがとうございます。私はすでにShellExecute を除外しました。パラメータ文字列全体を250文字に制限し、 私は約2000のメッセージが必要です。しかし、SE が私の場合に実際に動作する唯一のオプションのように見えます。 – Humanoid1000

+0

シッダース、あなたのコードに誤字があると思います。 objMail行には文字列 "&body ="が必要です。 (アンパサンドに注意してください) – Humanoid1000

0

は、最終的な結果だ:

が判明し、SendMail()は自宅ではなく職場で働いたが、CreateObject("Outlook.Application")は仕事で仕事をしました。

私のセキュリティ設定はOutlookでは問題ではありませんでしたが、それは日常的な誤植でした。

いずれにしても、このトピックで迷っている人はこのページに良い情報がたくさんあります。