简单的解决方法是在第一次调用 Workspaces 之前调用 CurrentDb:
Debug.Print CurrentDb.Name
Debug.Print Workspaces.Count
Debug.Print CurrentDb.Name
我会尝试揭开正在发生的事情的神秘面纱,但这只是我的理论。
Access 帮助文件的相关位如下(针对 CurrentDb):
注意 在以前版本的 Microsoft Access 中,您可能使用语法 DBEngine.Workspaces(0).Databases(0) 或 DBEngine(0)(0) 来返回指向当前数据库的指针。在 Microsoft Access 2000 中,您应该改用 CurrentDb 方法。CurrentDb 方法创建当前数据库的另一个实例,而 DBEngine(0)(0) 语法引用当前数据库的打开副本。CurrentDb 方法使您能够创建多个引用当前数据库的数据库类型变量。Microsoft Access 仍支持 DBEngine(0)(0) 语法,但您应该考虑对您的代码进行此修改,以避免在多用户数据库中可能发生冲突。
对于 Workspaces 集合:
当您第一次引用或使用 Workspace 对象时,您会自动创建默认工作区DBEngine.Workspaces(0)。
似乎通过在第一次调用 CurrentDb 之前创建默认工作区,您会以某种方式导致 CurrentDb 忘记它应该如何工作。似乎不是创建当前数据库的新实例,而是使用默认工作区中已经存在的实例。
当然,这都是猜测,我和你一样好奇,想知道“真正的答案”。