2016-10-17 11 views
1

私は自分の組織のために過去数ヶ月間データベースに取り組んでいます。私はOffice 2013を使用しています。Outlookを使用して顧客に電子メールでインターネットからコードを取得しました。しかし、コードをどれだけ編集しても、問題はまだ残っています。VBAで送信された電子メールを送信するとOutlookが終了する

私は.Displayプロパティを設定しているので、ユーザーは送信前にメッセージを見ることができます。問題は私にメッセージを表示することですが、送信ボタンをクリックすると、Outlookが閉じます。ただし、メールの.Sendのプロパティを使用しても問題ありません。

目的:私はhtml電子メールを送信しています。テーブルのhtmlコードを保存しましたので、ボタンをクリックしてテンプレートを取得できます。これは、ユーザーがさらに編集できるようになります。代替案は高く評価されています! :D

Private Sub CmdEmail_Click() 

Dim oApp As Object 
Dim oMail As Object 
Dim olAccount As Object 
Dim olAccounts As Object 
Dim olAccountTemp As Object 
Dim vallL As String 
Dim foundAccount As Boolean 
Dim strFrom As String 

On Error Resume Next 
Set oApp = CreateObject("Outlook.Application") 
Set oMail = oApp.CreateItem(olMailItem) 
Set olAccount = oApp.Account 
Set olAccountTemp = oApp.Account 

strFrom = CompanyEmail 
foundAccount = False 
Set olAccounts = oApp.Application.Session.Accounts 
For Each olAccountTemp In olAccounts 
Debug.Print olAccountTemp.SmtpAddress 
If (olAccountTemp.SmtpAddress = strFrom) Then 
    Set olAccount = olAccountTemp 
    foundAccount = True 
    Exit For 
End If 
Next 

Set oMail.SendUsingAccount = olAccount 
If foundAccount Then 
Debug.Print "ACCT FOUND!" 
With oMail 
    .BodyFormat = olFormatHTML 'Set body format to HTML 
    vallL = DLookup("[Memo]", "HtmlEmailT", "[ID] = 1") & "rs!CliName" 
    vallL = vallL & DLookup("[Memo]", "HtmlEmailT", "[ID] = 2") & "rs!InvoiceId" 
    vallL = vallL & DLookup("[Memo]", "HtmlEmailT", "[ID] = 3") & "rs!BalDue" 
    vallL = vallL & DLookup("[Memo]", "HtmlEmailT", "[ID] = 4") & "rs!InvoiceDate" 
    vallL = vallL & DLookup("[Memo]", "HtmlEmailT", "[ID] = 5") & "rs!InvTotal" 
    vallL = vallL & DLookup("[Memo]", "HtmlEmailT", "[ID] = 6") 
    .HTMLBody = vallL 
    .SendUsingAccount = olAccount 
    .SentOnBehalfOfName = """CompnayName"" <CompanyEmail>" 
    .Display 
    '.Send 
End With 
Else 
    Debug.Print "No acct found" 
    MsgBox "The chosen email is not signed in!!" & vbCrLf & "Please sign in first" 
End If 

Set oApp = Nothing 
Set oMail = Nothing 
Set olAccounts = Nothing 
Set olAccount = Nothing 
Set olAccountTemp = Nothing 

End Sub 

*会社のメールアドレスと会社名はフィールドではありません。

+0

このコードを実行すると、Outlookが既に開いているか、Outlookでコードを開くことができますか? – Chrismas007

+0

これについて言及しなかったことをお詫び申し上げます。それは、見通しが開かれない場合にのみ起こります。それが開いている場合、問題はありません。 –

+0

エラー時に削除を再開します。コード全体で使用しないでください。使用理由が決まったら、On Error Goto 0が必要です。ここで使用する理由はありません。 – niton

答えて

1

Outlookは、ウィンドウの最後(エクスプローラまたはインスペクタ)が閉じられるとすぐに終了します。

MailItem.GetInspectorを使用して、返された値を変数に格納して、Outlookが終了しないようにすることができます。

+0

こんにちは@ドミトリー、助けてくれてありがとう、もう少し説明してください、どうすれば私の状況を克服するためにそれを使用するのですか?私はmailitem.getinspectorの使い方を知りませんでした。 Outlookが終了しないように変数に値を格納した後、私は何をしますか? –

+0

値を変数に格納するだけです。インスペクタの1つへの参照が有効になるまで、Outlookは終了しません。 –

関連する問題