[英]Office 2010 VBA - pass SenderEmailAddress to Excel workbook and run Excel macro to send email
我一直在問那些比我更熟悉 VBA 的人,但沒有我希望的那種運氣。 這是我需要的:
這是我要發送的 Excel 部分:
Public dTime As Date
Sub AutoSchedule1()
dTime = Now() + TimeValue("01:00:00")
Sheet("Sheet1").Range("u1").Value = "Email On, next send at " & Hour(dTime) & ":" & Minute(dTime)
ActiveWorkbook.RefreshAll
Application.OnTime dTime, "SendStatsTeam"
If Hour(dTime) >= 18 Then
Application.OnTime dTime, "SendStatsTeam", , False
Exit Sub
End If
End Sub
Sub SendStatsTeam()
Dim AWorksheet As Worksheet
Dim Sendrng As Range
Dim rng As Range
Dim Hournow As Long
AutoSchedule1
On Error GoTo StopMacro
If Hour(Now()) > 12 Then
Hournow = Hour(Now()) - 12
Else
Hournow = Hour(Now())
End If
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set Sendrng = Worksheets("Sheet1").Range("A1:Z26")
Set AWorksheet = ActiveSheet
With Sendrng
ActiveWorkbook.EnvelopeVisible = True
With .Parent.MailEnvelope
.Introduction = "Here are your stats"
With .Item
.To = SenderEmailAddress
.CC = ""
.BCC = ""
.Subject = "Stats so far today" & Hour(Now()) & ":" & Application.WorksheetFunction.Text(Minute(Now()), "00")
.Send
End With
End With
rng.Select
End With
AWorksheet.Select
StopMacro:
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
ActiveWorkbook.EnvelopeVisible = False
End Sub
Sub emailoff()
Application.OnTime dTime, "SendStatsTeam", , False
Worksheets("Sheet2").Range("u1").Value = "Email Off"
End Sub
我意識到我在這里沒有正確完成所有事情,因為我對 VBA 還很陌生,但我已經盡我所能來弄清楚 Outlook 部分。
任何幫助將不勝感激 - 我不介意閱讀我只是在我無法弄清楚下一部分去哪里/去哪里的時候。
如果您選擇提供幫助,我想添加根據電子郵件主題發送不同范圍的不同工作表的功能。
謝謝
初始過帳
這不是一個答案。 這部分是對澄清的要求,部分是對我相信會幫助您進步的早期答案的參考。
為 Outlook 編寫的 VBA 宏和為 Excel 編寫的宏之間幾乎沒有區別。 您是否有理由希望從 Outlook 運行 Excel 宏? 在沒有 Outlook 的情況下包含宏會更容易。 例如這樣的事情:
為了回答之前的問題,我創建了一個宏來演示從 Outlook 寫入 Excel。 該宏不符合您的要求,但演示了許多相關的技術。 單擊https://stackoverflow.com/a/12146315/973283訪問該答案。
我希望以上幾點有幫助。 如有必要,請務必回來澄清或提出進一步的問題。
需求明晰后發帖2
答案的下一部分比我希望的要晚。 部分是因為這是忙碌的一天,部分是因為我遇到了一個我沒有預料到的問題。
從 Outlook 中通過以下方式選擇 Visual Basic 編輯器: - 依次選擇工具、宏和 Visual Basic 編輯器或 - 單擊 Alt+F11。
左下方將是 Project Explorer,它可能是:
- Project1 (VbaProject.OTM)
+ Microsoft Outlook Objects
+ Forms
+ Modules
如果您沒有表單或模塊,這些條目將丟失。 任何存在的條目可能已經被展開。 單擊+
展開Microsoft Outlook Objects
(如果尚未展開)。 顯示將變為:
- Project1 (VbaProject.OTM)
- Microsoft Outlook Objects
ThisOutlookSession
+ Forms
+ Modules
單擊ThisOutlookSession
。 右上角區域將變為白色(如果它還不是白色)。 這是一個代碼區,就像一個模塊,但用於特殊代碼。
將下面的代碼粘貼到ThisOutlookSession
代碼區域。
此代碼包含兩個宏。 第一個宏 Application_Startup() 在打開 Outlook 時自動執行。 它指定收件箱中新項目的到達將觸發宏myNewItems_ItemAdd()
的調用。 它還輸出“歡迎”以證明它已被調用。 第二個宏myNewItems_ItemAdd()
標識新項目的類型並將所選信息輸出到立即窗口。
這些宏正確執行,但有一個我沒有解決的問題。 在我看來,Outlook 對宏和訪問電子郵件的宏並不滿意。 當您打開 Outlook 時,它會告訴您有宏(前提是您具有足夠的安全級別)並為您提供啟用或禁用這些宏的選項。 如果宏嘗試訪問電子郵件,Outlook 會警告您並提供最多允許訪問 10 分鍾的選項。
我已經對這些宏進行了自我認證,這告訴 Outlook 我信任它們。 這會抑制有關存在宏的警告,但不會像我預期的那樣抑制有關嘗試訪問電子郵件的宏的警告。 我會為了我自己的利益而進一步調查,但必須准備好每 10 分鍾給予許可,這違背了您舉辦新項目活動的目標。
我建議您無論如何都使用這些宏,因為知道此功能存在可能會在以后有所幫助。
我可以想到三種情況:
.
Option Explicit
Public WithEvents MyNewItems As Outlook.Items
Private Sub Application_Startup()
' This event procedure is called when Outlook is started
Dim NS As NameSpace
Set NS = CreateObject("Outlook.Application").GetNamespace("MAPI")
With NS
Set MyNewItems = NS.GetDefaultFolder(olFolderInbox).Items
End With
MsgBox "Welcome"
End Sub
Private Sub myNewItems_ItemAdd(ByVal Item As Object)
' This event procedure is called whenever a new item is added to
' to the InBox.
Dim NewMailItem As MailItem
Debug.Print "------Item Received"
On Error Resume Next
' This will give an error and fail to set NewMailItem if
' Item is not a MailItem.
Set NewMailItem = Item
On Error GoTo 0
If Not NewMailItem Is Nothing Then
' This item is a mail item
With NewMailItem
Debug.Print "Subject " & .Subject
Debug.Print "Sender Email [" & .SenderEmailAddress & "]"
End With
Else
' Probably a meeting request.
Debug.Print "Not mail item " & Item.Subject
End If
End Sub
對於我的下一個帖子,我將添加一個 Outlook 宏,該宏可以打開一個工作簿並寫入它並從中讀取。
在您的問題中,您說要將工作簿中的范圍發送給電子郵件的作者。 你知道怎么做嗎? 如果不是,你會發送什么樣的范圍? 你希望它如何出現? 如果這會給您想要的外觀,那么將小范圍轉換為 Html 並不困難。
最終發布
抱歉,我放棄了這個問題。 我沒有嘗試阻止 Outlook 報告宏正在嘗試發送電子郵件。 關於這個問題的其他一切都很簡單,但這個問題是一個殺手。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.