2016-03-04 37 views
2

下面的腳本的偉大工程,但我有我每次打開Outlook,它的工作時間來手動運行Initialize_handler程序。如何在Outlook中發送電子郵件時自動運行宏?

Public WithEvents myOlApp As Outlook.Application 

Public Sub Initialize_handler() 
Set myOlApp = CreateObject("Outlook.Application") 
End Sub 

Private Sub myOlApp_ItemSend(ByVal Item As Object, Cancel As Boolean) 
Dim prompt As String 
prompt = "Are you sure you want to send " & Item.Subject & "?" 
If MsgBox(prompt, vbYesNo + vbQuestion, "Sample") = vbNo Then 
    Cancel = True 
    End If 
End Sub 

至於我可以看到,使這項工作自動我應該能夠在下面的腳本添加到ThisOutlookSession。然而這不起作用,我不知道爲什麼。

我的宏安全設置正確,它是運行在啓動時的代碼,但由於某種原因不能正常工作,直到我手動打開VBA編輯器,點擊進入Initialize_handler,然後按F5。

Private Sub Application_Startup() 
    Initialize_handler 
End Sub 

回答

1

這裏所描述的方法卷積https://msdn.microsoft.com/en-us/library/office/ff865076.aspx指示「的示例代碼必須放置在類模塊」。

我建議你只使用特殊的類模塊ThisOutlookSession。你可以嘗試一下你自己的類模塊,但是如果你只是想讓它工作,那麼在ThisOutlookSession中用你的代碼替換掉所有的代碼。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) 
Dim prompt As String 
prompt = "Are you sure you want to send " & Item.Subject & "?" 
If MsgBox(prompt, vbYesNo + vbQuestion, "Sample") = vbNo Then 
    Cancel = True 
    End If 
End Sub 
+0

即使手動運行,這段代碼本身也不會執行任何操作。 – CocodaMonkey

+0

您不能運行需要一個參數代碼,** **項,而沒有經過參數。但這不是主要問題。測試之前您是否重新啓動Outlook? – niton

+0

是,但它不會有問題,因爲這一段代碼不應該做任何兩種方式。如果你用這個替換所有的代碼,沒有任何東西會調用它。 – CocodaMonkey

0

可以代替把它直接在ThisOutlookSession

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) 
    MsgBox "Sent somthing!" 
End Sub 
+0

這是行不通的。事實上,即使手動執行,代碼本身也不會執行任何操作。 – CocodaMonkey

+0

正如@niton指出的,你不能在不傳入參數的情況下手動調用此代碼 –

0

就這麼簡單。請注意,您需要更改outMail.DisplayoutMail.Display (True)。你瞧,全碼:

... 
... 
... 
outMail.Display (True) 

On Error Resume Next 
bSent = outMail.sent 'This will NOT SEND. Used to get error. 
If Err <> 0 Then 
    'Email was sent. Put followed actions here. 
Else 
    'Email was not sent. Put followed actions here. 
End If 
On Error GoTo 0 

優點:

  • 你得到你想要的東西
  • 很簡單。

缺點:

  • Excel文件(或您正在運行從這個代碼的任何其他運行時)將凍結,直到你取消或發送電子郵件。
相關問題