MS-Access导航窗格是否可见?

时间:2017-05-26 04:08:26

标签: vba ms-access access-vba

以下用于关闭访问导航窗格的代码。

DoCmd.NavigateTo "acNavigationCategoryObjectType"
DoCmd.RunCommand acCmdWindowHide

但问题是如果导航窗格已经关闭,那么acCmdWindowHide将隐藏任何其他打开的对象(即表格,表格)。 我在我的代码中使用DoCmd.TransferDatabase,当执行此操作时,导航窗格有时会打开。如果出现有关数据导入的警告消息且用户单击取消,则可能会发生这种情况。为了确保用户没有看到我要隐藏它的窗格,但如果它已经被隐藏,那么没有什么可隐藏的,但上面的命令只是隐藏了我的表单,这不是我想要的。

该行

DoCmd.NavigateTo "acNavigationCategoryObjectType"
始终执行

并且不返回任何内容。如果没有要导航到的导航窗格,则不会返回错误。

我的问题是:如何确定导航窗格当前是否打开,以便我知道我必须关闭它。 或者如果我使用上面的代码,如何确保关闭导航窗格但没有其他对象?

2 个答案:

答案 0 :(得分:1)

This forum thread建议:

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")进行比较,可以判断是否可以关闭导航窗格。

我发现,如果当前在导航窗格中设置了搜索过滤器,则其他示例中建议的代码将失败。在某些情况下,这将导致活动表单关闭。这可能会导致不良的用户体验。这个例程应该解决这个问题。我只发现了两个限制:

  1. “导航窗格”处于打开状态,但没有其他对象处于打开状态。我想不出为什么要在这种情况下隐藏导航窗格的充分理由。
  2. 您从导航窗格中打开tblEmployee,它将成为活动对象,然后运行此例程以隐藏导航窗格。它不会执行任何操作,因为tblEmployee是活动对象名称,并且也是Nav Pane中的选定项目。除了YMMV,我认为您不会遇到这种情况。

在这两种情况下,子菜单都不会隐藏导航窗格,这比关闭活动表单更好。

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