如何使用VBA

时间:2015-12-29 13:41:13

标签: vba ms-access access-vba

我有一个前端数据库,我动态地将一些链接表添加到后端数据库。接下来,我正在从隐藏的系统表中读取它们的ID,以便在我创建的一些自定义组中将它们添加到导航窗格。

虽然我相信我正在使用正确的表/值,但在完成MSysNavPaneGroupToObjects表中的插入后,我找不到任何方法来刷新导航窗格。

可以在此处找到与我正在尝试实现的内容相近的唯一信息:Change Navigation pane group in access through vba

但在我的情况下,所有值都是成功创建的(我认为),但我看不到导航窗格中的条目。有时它有效,但大多数时候我只看到空组。

我想知道是否有人解决了类似问题,或者有文档/论坛我可以找到更多信息。谢谢

3 个答案:

答案 0 :(得分:2)

尝试以下method

Application.RefreshDatabaseWindow

可替换地:

CurrentDb.TableDefs.Refresh

答案 1 :(得分:1)

访问中存在一个错误,您必须刷新导航窗格才能显示甚至关闭并重新打开。

另一种选择是隐藏然后显示,但这可能只是像其他建议一样刷新它

<强>隐藏

DoCmd.RunCommand acCmdWindowHide

显示

DoCmd.SelectObject acTable, , True

答案 2 :(得分:1)

如果写入MSysNav*表的更改并不总是出现在导航窗格本身中,即使在关闭并重新打开数据库之后,这也不是真正的&#34;刷新&#34;问题。其他一些东西可能会干扰这些表的更新,导致您的更改无效。

在一个answer to a related question Wayne G. Dunn建议&#34;这个[MSysNavPaneObjectIDs]表在Access&#34;的奇思妙想中被重建,这可能与应用程序对该表的更新产生冲突&#39 ; s VBA代码。如果这是真的并且MSACCESS.EXE在数据库打开时期望(有效)独占访问MSysNav*系统表,那么解决方法是确保正在修改的数据库是而不是在应用MSysNav*修改时在MSACCESS.EXE中打开。

这样做的一种方法是在&#34; main&#34;中使用VBA代码。数据库

  1. 将相关详细信息写入临时文本文件
  2. 启动一个单独的流程来执行更新,然后立即
  3. 关闭&#34; main&#34;数据库使用Application.Quit
  4. 单独的进程可以在另一个Access数据库,VBScript或您喜欢的任何内容中运行代码。它会

    1. 阅读临时文本文件中的相关详细信息
    2. 更新主数据库中的MSysNav*表,而MSACCESS.EXE没有打开它,
    3. 删除临时文本文件
    4. 使用主数据库重新启动MSACCESS.EXE,然后
    5. 终止自己。
    6. &#34;相关细节&#34;两个进程之间共享将取决于此方法的实现细节,但可能包括

      • &#34; main&#34;的完整路径数据库(所以单独的进程可以找到它),
      • MSACCESS.EXE相关副本的完整路径(因此单独的进程可以在完成后重新加载主数据库),并且
      • 要在主数据库的MSysNav*表中添加或更新的项目。