即使没有搜索结果,也会关闭访问导航窗格

时间:2019-03-11 14:03:13

标签: vba ms-access

在启动我们的vba-access-application(由启动VBA功能的VBE加载项完成)时,我们通常使用以下代码关闭导航窗格:

DoCmd.SelectObject acMacro, "Autoexec", True
DoCmd.RunCommand acCmdWindowHide

当我开始使用导航窗格中的内置搜索/过滤器栏时,当宏“ Autoexec”不可见时,此代码不再起作用。所以我将其更改为:

DoCmd.NavigateTo "acNavigationCategoryObjectType"
DoCmd.RunCommand acCmdWindowHide

只要还剩下任何搜索结果,这似乎就可以正常工作。当我在搜索栏(=过滤器)中写“没有那个名字的东西”时,导航窗格将不会关闭。

即使没有可见的搜索结果,有人知道关闭导航窗格的方法吗?

2 个答案:

答案 0 :(得分:1)

DoCmd.NavigateTo "acNavigationCategoryModifiedDate"
DoCmd.NavigateTo "acNavigationCategoryObjectType"
DoCmd.RunCommand acCmdWindowHide

为了使命令DoCmd.RunCommand acCmdWindowHide成功关闭导航窗格,导航窗格必须具有焦点。但是要使Access窗口具有焦点,该窗口内的控件必须具有焦点。事实证明,NavigateTo命令将永远不会将焦点放在“搜索”文本框中,因此,如果搜索结果为空白并且没有可供选择的内容,那么 focus不会更改为导航窗格(即使从技术上讲,导航窗格的选定组可能已更新。)

如果您在导航窗格上玩了足够长的时间,将会发现在最高级别的导航类别之间切换时,导航搜索结果和文本框会被重置。因此,我建议的代码...它会在两个导航类别之间切换,以便在该操作期间清除搜索结果,从而使导航窗口最终在其列出的对象之一获得焦点时获得焦点。

(确实,在这种情况下,使用NavigateTo命令只是将焦点放在导航窗格上的愚蠢技巧。这只是Access接口的另一个明显缺陷,即没有直接的命令/对象来控制导航窗格。)

答案 1 :(得分:0)

我建议您不要编写任何代码-而是使用内置的Access设置来防止(隐藏)导航窗格。

工作,然后在启动过程中按住Shift键。 (Shift键旁路)。

Shift键发展舞蹈:

您将发现您可以启动+开发大量代码并在不退出的情况下处理表单/报表。 但是,您仍然会完成Shift键启动旁路。当然,原因是在启动时,您的代码可能会隐藏功能区。 (或启动自定义的)。启动表单也是如此–它可能会运行一堆代码,要求登录,检查表链接。

然后是您拥有的启动设置。您可能有一份启动表格(不想运行该表格)。您可能已经取消选中显示导航窗格,但是在开发过程中需要这样做。如果您有自定义功能区怎么办? (再次在“工具”->“选项”中进行设置)。并使用特殊键-再次对用户关闭,但对开发人员是必需的。

然后是自动按键宏。这用于重新设置F1键的用途(帮助-禁用或启动您自己的自定义帮助-例如pdf或word文件)。

还有其他用途,例如使用f12弹出一些自定义搜索框等。

因此,所有这些自定义设置都将是大量的设置。许多将来自工具->选项(主窗体,功能区等)。某些将来自您的代码。

您确实(但确实)无法将所有这些设置都写出来,而且有些仍然需要重新启动。在典型的应用程序中,确实会有很多设置需要针对您的用户与作为开发人员的用户进行更改。

因此,在启动时按住Shift键。这不仅会阻止您的启动代码运行,还会阻止您的启动设置-甚至包括导航窗格,尤其是工具->设置区域(Shift键会忽略其中的大多数设置)。

因此,在开发的一天中,我将整天进行这种移位键舞。 但是,您可以在此处使用两个技巧和快捷方式,以最小化此退出行为,并重新进入沉闷的吼叫声。 一个不错的选择是始终在QAT上放置一个自定义的紧凑型维修按钮。因此,“ QAT”按钮现在只需单击一下鼠标,即可随时使用。因此,如果我正在设计模式下处理表单,通常切换到视图模式就足够了,但是在那些情况下,我需要完全退出+重新开始测试?我什至没有保存表格,只需快速单击一下QAT compact + repair按钮即可。 一键! (可能必须回答是才能保存)。此时,无需退出即可重新启动应用程序。而且您无需按住Shift键,而是可以运行所有启动设置。现在,您进入了用户测试模式,只需单击一下鼠标即可。

这使您可以轻松地从开发人员模式切换到“用户测试”模式,只需单击一下鼠标即可。 因此,您现在可以运行应用程序,因为它将对最终用户显示。

要切换回开发人员模式,只需简单地单击自定义C + R按钮即可。 (然后按住换档键)。这将使您回到开发人员模式(导航窗格,功能键,所有内容以及所有这些启动设置现在都将被忽略-您可以自由开发,而不会遇到任何麻烦和问题)。完全开放使用Access,好像根本没有任何设置一样。

并且如上所述,您需要启动c + r,并且无论如何,您需要+想要在一天中多次执行该操作。 并且如前所述,对于很多更改,您不必进行此翻转即可保持开发人员模式。 当然,在某些情况下,您的“用户模式”将真正锁定Access,因此您必须退出(失去QAT技巧)。因此,您通常可以从开发人员跳到用户,而不能以其他方式跳回。同样,您不必一直在用户模式下运行+测试所有内容,但通常会启动一些全局变量,密码之类的东西会迫使您遇到此问题。

那么,在这种情况下?

我快速按下了alt-f4来退出应用程序。此时,accDB文件仍应在Windows资源管理器中突出显示。因此,现在只需快速按一下Enter键即可重新启动accDB。如果要使用“用户模式”,则只需不按住Shift键。做一些测试,现在是alt-f4,然后快速按一下Enter键(我们回到Windows文件浏览,并且accDB文件突出显示)。但是,这次您将按住Shift键,因此现在回到开发人员模式。 通常,我会在测试之前调用启动代码。

Ctrl-g(跳至调试窗口),输入MyStartup

(假定MyStartup是您执行所有设置的第一个启动例程,然后启动主窗体-因此在某些应用程序中,我不使用内置的启动窗体设置,而是使用autoexec宏来调用我的主要启动例程(MyStartup)

因此,在很多情况下,我不必退出Access即可进入测试模式。

当然,可以使用,查看和开发一些报告和表格,而不必使用所有“用户”启动代码的东西来完全运行应用程序。

因此,某些报告可能会起作用,但随后又很可能需要打开某种表格才能使其起作用。 (或者可能需要在启动代码中加上系统范围的功能和公司名称设置)。因此,您需要退出的能力与能够进行“某些”开发的能力之差在这里常常会有所不同。

所以我要说的是,我经常被迫退出并重新加载应用程序(alt-f4,点击Enter键)。因此,只有2键组合才能退出并重新加载/重新进入Access。

一天结束时,如果您不能使用该QAT快捷方式建议,则您将在一天中退出+重新输入很多次。 如前所述,对于大量表单等,您可以在视图和设计模式之间切换。 (但是,您当然会在没有所有启动废话的情况下运行访问权限,这会使开发人员无法工作。)

最简单的事情是在一天结束时,将有更多的设置,然后仅仅是导航窗格(或缺少导航窗格),这些设置会破坏您的开发过程。因此,上面的shift键跳动和QAT建议还解决了OTHER的所有其他许多设置,而您无需编写一行代码即可解决此问题。

当然,一旦一切正常,您就可以将应用程序编译为accDE。然后将Shift键旁路代码应用于该代码,以将应用程序进一步锁定。