以下用于关闭访问导航窗格的代码。
DoCmd.NavigateTo "acNavigationCategoryObjectType"
DoCmd.RunCommand acCmdWindowHide
但问题是如果导航窗格已经关闭,那么acCmdWindowHide将隐藏任何其他打开的对象(即表格,表格)。 我在我的代码中使用DoCmd.TransferDatabase,当执行此操作时,导航窗格有时会打开。如果出现有关数据导入的警告消息且用户单击取消,则可能会发生这种情况。为了确保用户没有看到我要隐藏它的窗格,但如果它已经被隐藏,那么没有什么可隐藏的,但上面的命令只是隐藏了我的表单,这不是我想要的。
该行
DoCmd.NavigateTo "acNavigationCategoryObjectType"
始终执行并且不返回任何内容。如果没有要导航到的导航窗格,则不会返回错误。
我的问题是:如何确定导航窗格当前是否打开,以便我知道我必须关闭它。 或者如果我使用上面的代码,如何确保关闭导航窗格但没有其他对象?
答案 0 :(得分:1)
Public Function HideIt()
' Employee is just any existing table
DoCmd.SelectObject acTable, "Employee", True
If Application.CurrentObjectName = "Employee" Then DoCmd.RunCommand acCmdWindowHide
End Function
答案 1 :(得分:1)
如何确定导航窗格当前是否打开,以便 我知道我必须关闭它。或者如何确保关闭 导航窗格,但如果使用上面的代码,则没有其他对象?
在将焦点设置到导航窗格之前,按住Application.CurrentObjectName
值,
然后将该值与Application.CurrentObjectName
之后的DoCmd.NavigateTo ("acNavigationCategoryObjectType")
进行比较,可以判断是否可以关闭导航窗格。
我发现,如果当前在导航窗格中设置了搜索过滤器,则其他示例中建议的代码将失败。在某些情况下,这将导致活动表单关闭。这可能会导致不良的用户体验。这个例程应该解决这个问题。我只发现了两个限制:
在这两种情况下,子菜单都不会隐藏导航窗格,这比关闭活动表单更好。
Public Sub HideNavPane()
' This will hide the Navigation Pane.
' It works even if a search filter is set, unlike other solutions that may
' inadvertently close the active object.
' Limitations: An object (form, report, query, etc) must be open and it
' cannot be the same name as the selected item in the nav pane
' or this will do nothing.
Dim strCurrentObjectName As String
strCurrentObjectName = Application.CurrentObjectName
' Move focus to the navigation pane/database container
DoCmd.NavigateTo ("acNavigationCategoryObjectType")
If strCurrentObjectName <> Application.CurrentObjectName Then
' The Navigation Pane is open and has focus.
' Use the window menu to hide the navigation pane
DoCmd.RunCommand acCmdWindowHide
End If
End Sub