簡単な回避策は、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 メソッドを使用すると、現在のデータベースを参照する Database 型の変数を複数作成できます。Microsoft Access は引き続き DBEngine(0)(0) 構文をサポートしますが、マルチユーザー データベースでの競合を回避するために、コードにこの変更を加えることを検討する必要があります。
Workspaces コレクションの場合:
Workspace オブジェクトを初めて参照または使用するときに、既定のワークスペースである DBEngine.Workspaces(0)が自動的に作成されます。
CurrentDb への最初の呼び出しの前に既定のワークスペースを作成することで、CurrentDb がどのように機能するかを何らかの形で忘れさせているようです。現在のデータベースの新しいインスタンスを作成する代わりに、デフォルトのワークスペースに既にあるインスタンスを使用しているようです。
もちろん、これはすべて推測であり、「本当の答え」を知りたいと思っています。