1

次のコード行があります。Outlookを開いているときは正常に動作しますが、Outlookを閉じていても動作させたいです。コマンドボタンのクリックイベントにコードを保持しました。

Private Sub btnSend_Click()
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = GetObject("", Outlook.Application)
OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
    .To = "adbc@adbc.com"
    .CC = ""
    .BCC = ""
    .Subject = "Test mail from Excel Sheet-OutLook Closed"
    .Body = "This is body of the mail"
    .Display
    .Send
    .ReadReceiptRequested = True
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End Sub

GetObjectメソッドとCreateObjectメソッドの両方で試してみました。Outlookを閉じた後にこのコードを実行すると、エラーは表示されませんが、メールは送信されません。

メールを送信する次のコード行ですが、Outlookの送信トレイでキューに入れられています。ユーザーがOutlookを開くと、ユーザーだけが送信トレイから移動します。

Private Sub btnSend_Click()
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
    .To = "adbc@adbc.com"
    .CC = ""
    .BCC = ""
    .Subject = "Test mail from Excel Sheet-OutLook Closed"
    .Body = "This is body of the mail"
    .Display
    .Send
    .ReadReceiptRequested = True
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
4

2 に答える 2

1

シェルコマンドを使用して、メールを送信する前に実際にOutlookを開くことができます。

Public 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
Public Sub OpenOutlook()
Dim ret As Long
 On Error GoTo aa
 ret = ShellExecute(Application.hwnd, vbNullString, "Outlook", vbNullString, "C:\", SW_SHOWNORMAL)
 If ret < 3 Then

 MsgBox "Outlook is not found.", vbCritical, "SN's Customised Solutions"
 End If
aa:
End Sub

これを別のモジュールに保存し、メールを送信しているコードからモジュールを呼び出します。私が取り組んでいる部分は、これを非表示にして、アクティベーションが引き続きExcelで行われるようにする方法です。

于 2013-06-13T07:19:41.630 に答える
1

Outlook 2013の場合、これはOutlook設定の問題であり、VBAコードの問題ではありません。

  • Outlookを開きます

  • [ファイル]->[オプション]->[詳細]に移動します

  • [送信と受信]の見出しまでスクロールし、[送信/受信…]ボタンをクリックします

  • 「グループ「すべてのアカウント」の設定」で、「終了時に自動送受信を実行する」がチェックされていることを確認します

これにより、Outlookを閉じたときに、OUTLOOKの[送信トレイ]内のすべてのアイテムが確実に送信されます。これで問題が解決しました。Outlookの他のバージョンでも同様である可能性があります。

于 2015-11-15T22:07:03.477 に答える