使用 VBA,有没有办法从我的会话的自动回复(外出)中检索日期?
Using VBA, is there a way to retrieve the dates from my session's Automatic Replies (Out Of Office)?
我正在尝试开发一个宏,将活动(或最近的)外出日期添加到我的签名中。有点像“即将到来的 OOO”信号。
为此,我需要从“自动回复”部分检索此类日期。
有没有办法找回它们?
感谢@Nathan_Sav 的提示。还使用以下页面寻求帮助:
它对我有用,但我不得不摆脱标准签名:它对我仍然有用。它基于即将发生的事件,而不是自动回复配置。
需要在 ThisOutlookSession
中声明检查器以触发事件:
Private WithEvents CsInspect As Outlook.Inspectors
它可以在启动时激活,...
Private Sub Application_Startup()
Call General_Handler
End Sub
...或在我可以设置为按钮的特定宏上:
Public Sub TurnOnSignature()
Call General_Handler
End Sub
它将设置 with-events 变量...
Private Sub General_Handler()
Set CsInspect = Application.Inspectors
End Sub
常数:
Const GrSgnName = "My Name (and position)"
Const GrSgnComp = "My Company"
Const GrSgnLocn = "My Location"
Const GrSngPhon = "My Phone Number"
Const SingGrL = "<br><br>"
Const SingGrE = "</p>"
将构建我的新签名的函数:
Function GralSignature() As String
Const SignStr = "<span style= 'font-family: Calibri;'>"
Const SignEnd = "</span>"
GrlSignNm = GSignHTML1(GrSgnName, 13, False)
GrlSignCo = GSignHTML1(GrSgnComp, 12, False)
GrlSignLc = GSignHTML1(GrSgnLocn, 12, False)
GrlSignPh = GSignHTML1(GrSngPhon, 12, False)
GrlSignOO = GSignHTML1(Check_Next_OOOs(20), 12, True)
GrlSigntr = GrlSignNm & GrlSignOO & GrlSignCo & GrlSignLc & GrlSignPh
GrlSigntr = SignStr & SingGrL & GrlSigntr & SignEnd
GralSignature = GrlSigntr
End Function
向基于 HTML 的文本添加格式的辅助函数:
函数 GSignHTML1(StrConvert As String, StrSz As Long, StrBl As Boolean) As String
将 SingGrS 调暗为字符串
SingGrS = "<p style= 'margin: 0; padding: 0; font-size: " & StrSz & ";"
If StrBl = True Then
SingGrS = SingGrS & "font-weight: bold;"
End If
SingGrS = SingGrS & "'>"
GSignHTML1 = SingGrS & StrConvert & SingGrE
End Function
循环处理当前日期和我指定的日期(基于日历)之间所有即将发生的外出事件的功能。它将尽快检索。
Function Check_Next_OOOs(VarDays As Long) As String
Dim OlNSpa_ As NameSpace
Dim OlMeets As Object
Dim OlItems As Items
Dim OlMeet_ As AppointmentItem
Dim DateStr As Date, DateEnd As Date, StrDStr As String, StrDEnd As String
Dim DateFlt As String, OOOStr As Date, OOOEnd As Date, SuccFlag As Boolean
DateStr = Date
DateEnd = Date + VarDays
StrDStr = "[START] >= " & Chr(34) & DateStr & Chr(34)
StrDEnd = "[END] <= " & Chr(34) & DateEnd & Chr(34)
DateFlt = StrDStr & " AND " & StrDEnd
Check_Next_OOOs = DateStr & "-" & DateEnd
Set OlNSpa_ = Application.GetNamespace("MAPI")
Set OlMeets = OlNSpa_.GetDefaultFolder(olFolderCalendar)
Set OlItems = OlMeets.Items.Restrict(DateFlt)
OlItems.Sort "[START]"
For Each OlMeet_ In OlItems
With OlMeet_
If .BusyStatus = 3 Then
Debug.Print .Subject, .Start, .End
OOOStr = .Start
OOOEnd = .End
SuccFlag = True
Exit For
End If
End With
Next OlMeet_
If SuccFlag = True Then
If Format(OOOEnd, "hh:mm:ss") = "00:00:00" Then
OOOEnd = OOOEnd - 1
End If
Check_Next_OOOs = Format(OOOStr, "yyyy mmm dd") & " - " & Format(OOOEnd, "yyyy mmm dd")
Check_Next_OOOs = "OOO " & Check_Next_OOOs
Else: Check_Next_OOOs = ""
End If
End Function
最后,结果:
谢谢!
我正在尝试开发一个宏,将活动(或最近的)外出日期添加到我的签名中。有点像“即将到来的 OOO”信号。
为此,我需要从“自动回复”部分检索此类日期。
有没有办法找回它们?
感谢@Nathan_Sav 的提示。还使用以下页面寻求帮助:
它对我有用,但我不得不摆脱标准签名:它对我仍然有用。它基于即将发生的事件,而不是自动回复配置。
需要在 ThisOutlookSession
中声明检查器以触发事件:
Private WithEvents CsInspect As Outlook.Inspectors
它可以在启动时激活,...
Private Sub Application_Startup()
Call General_Handler
End Sub
...或在我可以设置为按钮的特定宏上:
Public Sub TurnOnSignature()
Call General_Handler
End Sub
它将设置 with-events 变量...
Private Sub General_Handler()
Set CsInspect = Application.Inspectors
End Sub
常数:
Const GrSgnName = "My Name (and position)"
Const GrSgnComp = "My Company"
Const GrSgnLocn = "My Location"
Const GrSngPhon = "My Phone Number"
Const SingGrL = "<br><br>"
Const SingGrE = "</p>"
将构建我的新签名的函数:
Function GralSignature() As String
Const SignStr = "<span style= 'font-family: Calibri;'>"
Const SignEnd = "</span>"
GrlSignNm = GSignHTML1(GrSgnName, 13, False)
GrlSignCo = GSignHTML1(GrSgnComp, 12, False)
GrlSignLc = GSignHTML1(GrSgnLocn, 12, False)
GrlSignPh = GSignHTML1(GrSngPhon, 12, False)
GrlSignOO = GSignHTML1(Check_Next_OOOs(20), 12, True)
GrlSigntr = GrlSignNm & GrlSignOO & GrlSignCo & GrlSignLc & GrlSignPh
GrlSigntr = SignStr & SingGrL & GrlSigntr & SignEnd
GralSignature = GrlSigntr
End Function
向基于 HTML 的文本添加格式的辅助函数: 函数 GSignHTML1(StrConvert As String, StrSz As Long, StrBl As Boolean) As String 将 SingGrS 调暗为字符串
SingGrS = "<p style= 'margin: 0; padding: 0; font-size: " & StrSz & ";"
If StrBl = True Then
SingGrS = SingGrS & "font-weight: bold;"
End If
SingGrS = SingGrS & "'>"
GSignHTML1 = SingGrS & StrConvert & SingGrE
End Function
循环处理当前日期和我指定的日期(基于日历)之间所有即将发生的外出事件的功能。它将尽快检索。
Function Check_Next_OOOs(VarDays As Long) As String
Dim OlNSpa_ As NameSpace
Dim OlMeets As Object
Dim OlItems As Items
Dim OlMeet_ As AppointmentItem
Dim DateStr As Date, DateEnd As Date, StrDStr As String, StrDEnd As String
Dim DateFlt As String, OOOStr As Date, OOOEnd As Date, SuccFlag As Boolean
DateStr = Date
DateEnd = Date + VarDays
StrDStr = "[START] >= " & Chr(34) & DateStr & Chr(34)
StrDEnd = "[END] <= " & Chr(34) & DateEnd & Chr(34)
DateFlt = StrDStr & " AND " & StrDEnd
Check_Next_OOOs = DateStr & "-" & DateEnd
Set OlNSpa_ = Application.GetNamespace("MAPI")
Set OlMeets = OlNSpa_.GetDefaultFolder(olFolderCalendar)
Set OlItems = OlMeets.Items.Restrict(DateFlt)
OlItems.Sort "[START]"
For Each OlMeet_ In OlItems
With OlMeet_
If .BusyStatus = 3 Then
Debug.Print .Subject, .Start, .End
OOOStr = .Start
OOOEnd = .End
SuccFlag = True
Exit For
End If
End With
Next OlMeet_
If SuccFlag = True Then
If Format(OOOEnd, "hh:mm:ss") = "00:00:00" Then
OOOEnd = OOOEnd - 1
End If
Check_Next_OOOs = Format(OOOStr, "yyyy mmm dd") & " - " & Format(OOOEnd, "yyyy mmm dd")
Check_Next_OOOs = "OOO " & Check_Next_OOOs
Else: Check_Next_OOOs = ""
End If
End Function
最后,结果:
谢谢!