如何使用 VBA 在 Outlook 365 上启动时显示所有日历?
Posted
技术标签:
【中文标题】如何使用 VBA 在 Outlook 365 上启动时显示所有日历?【英文标题】:How to show all calendars at startup on Outlook 365 using VBA? 【发布时间】:2022-01-10 14:42:19 【问题描述】:我在 Windows 10 上使用 Outlook 365。 “我的日历”组中有三个日历。 我想在启动时显示所有日历,默认日历日历 1 使用 VBA 处于活动状态。 为此,我使用了下面的 VBA 代码,但是有两个问题。
一个问题是部分代码是多余的,这使得它很耗时。 默认情况下,启动后只有我的日历组中的 Calendar1 可见。 为了显示所有日历,代码使 Calendar2 和 Calendar3 可见。 运行这些命令后,Calendar3 处于活动状态。 启动后激活Calendar1,代码使Calendar1不可见,然后可见。
我认为,与其这样,使用对应于在导航窗格中选中“我的日历”复选框的命令是一种有效的方法。 但我不知道该怎么做。
另外一个问题是,使用这个宏启动后,我无法通过快捷键Cntl+Alt+1和Cntl+Alt+2切换日视图和月视图。 我认为检查“我的日历”的方法可以解决这个问题 因为我手动勾选复选框时可以通过快捷键切换这些视图。
那么你能告诉我解决这些问题的方法吗? 提前谢谢你。
Private WithEvents g_Items As Outlook.Items
Private Sub Application_Startup()
Dim Ns As Outlook.NameSpace
Set Ns = Application.GetNamespace("MAPI")
Set g_Items = Ns.GetDefaultFolder(olFolderCalendar).Items
setupInitialDisplayCalendars
End Sub
Public Sub setupInitialDisplayCalendars()
Dim navModCal As CalendarModule
Dim navGroup As NavigationGroup
Set navModCal = ActiveExplorer.NavigationPane.Modules.GetNavigationModule(olModuleCalendar)
Set navGroup = navModCal.NavigationGroups.Item("My Calendars")
If Not (navGroup Is Nothing) Then
navGroup.NavigationFolders.Item("Calendar2").IsSelected = True
navGroup.NavigationFolders.Item("Calendar3").IsSelected = True
navGroup.NavigationFolders.Item("Calendar1").IsSelected = False
navGroup.NavigationFolders.Item("Calendar1").IsSelected = True
End If
End Sub
【问题讨论】:
看看Select Multiple Calendars in Outlook。 【参考方案1】:您可以使用NavigationFolders 对象来显示Outlook 导航页面上列出的日历。
Sub SelectCalendars()
Dim objPane As Outlook.NavigationPane
Dim objModule As Outlook.CalendarModule
Dim objGroup As Outlook.NavigationGroup
Dim objNavFolder As Outlook.NavigationFolder
Dim objCalendar As Folder
Dim objFolder As Folder
Dim i As Integer
Set Application.ActiveExplorer.CurrentFolder = Session.GetDefaultFolder(olFolderCalendar)
DoEvents
Set objCalendar = Session.GetDefaultFolder(olFolderCalendar)
Set objPane = Application.ActiveExplorer.NavigationPane
Set objModule = objPane.Modules.GetNavigationModule(olModuleCalendar)
With objModule.NavigationGroups
Set objGroup = .GetDefaultNavigationGroup(olMyFoldersGroup)
End With
For i = 1 To objGroup.NavigationFolders.Count
Set objNavFolder = objGroup.NavigationFolders.Item(i)
Select Case i
' Enter the calendar index numbers you want to open
Case 1, 3, 4
objNavFolder.IsSelected = True
' Set to True to open side by side
objNavFolder.IsSideBySide = False
Case Else
objNavFolder.IsSelected = False
End Select
Next
' set the view here
Set objPane = Nothing
Set objModule = Nothing
Set objGroup = Nothing
Set objNavFolder = Nothing
Set objCalendar = Nothing
Set objFolder = Nothing
End Sub
要更改日历文件夹视图(日/周/月),您可以使用视图对象:
Dim objViews As Views
Dim objView As View
Set objViews = Application.ActiveExplorer.CurrentFolder.Views
Set objView = objViews.Item("Calendar")
With objView
' Set the calendar view to show a
' single day.
.CalendarViewMode = olCalendarViewDay
End With
objView.Apply
CalendarView.CalendarViewMode 属性返回或设置一个OlCalendarViewMode,它确定CalendarView 对象的当前视图模式。
【讨论】:
感谢您的回复。您的方式与我的代码几乎相同。运行代码后,会显示日历 1、3 和 4,但日历 4 处于活动状态。这就是我的问题。我想在启动时显示“默认日历(日历 1)处于活动状态”的所有日历。所以我写了上面的代码。你的第二个代码让我的 Outlook 日历以某种方式冻结。 您能说得更具体些吗?为什么需要改变视图? 我想显示默认日历(日历 1)处于活动状态的所有日历,并且在启动时具有月视图,之后我想通过快捷键切换月视图和周视图, Cntl+Alt+1 和 Cntl+Alt+2。我的代码可以做第一个,但有点费时,我不能做第二个。我认为检查“我的日历”检查的方式可以解决这些问题,但我不知道该怎么做。 前段时间,我发现运行我的代码,然后在日历上点击两次,我可以在两个视图之间切换。这对我来说几乎没问题。但我想知道更有效的解决方案。 我会补充我的解释。我想显示默认日历(日历 1)在启动时处于活动状态的所有日历,因为我主要使用默认日历,这样对我来说很省时。以上是关于如何使用 VBA 在 Outlook 365 上启动时显示所有日历?的主要内容,如果未能解决你的问题,请参考以下文章