Простой обходной путь - вызвать CurrentDb перед первым вызовом Workspaces:
Debug.Print CurrentDb.Name
Debug.Print Workspaces.Count
Debug.Print CurrentDb.Name
Я попытаюсь объяснить, что происходит, но это только моя теория.
Соответствующие биты файла справки Access следующие (для CurrentDb):
Примечание В предыдущих версиях Microsoft Access вы могли использовать синтаксис DBEngine.Рабочие пространства (0) .Databases (0) или DBEngine (0) (0) для возврата указателя на текущую базу данных.В Microsoft Access 2000 вместо этого следует использовать метод CurrentDb. Метод CurrentDb создает другой экземпляр текущей базы данных, а синтаксис DBEngine (0) (0) ссылается на открытую копию текущей базы данных. Метод CurrentDb позволяет создавать более одной переменной типаБаза данных, которая ссылается на текущую базу данных.Microsoft Access по-прежнему поддерживает синтаксис DBEngine (0) (0), но вы должны рассмотреть возможность внесения этой модификации в свой код, чтобы избежать возможных конфликтов в многопользовательской базе данных.
А для коллекции Workspaces:
Когда вы впервые ссылаетесь на объект рабочей области или используете его, вы автоматически создаете рабочее пространство по умолчанию , DBEngine.Workspaces (0).
ItКазалось бы, создавая рабочее пространство по умолчанию перед первым вызовом CurrentDb, вы каким-то образом заставляете CurrentDb забыть, как оно должно работать.Кажется, что вместо создания нового экземпляра текущей базы данных он просто использует тот, который уже лежит в рабочей области по умолчанию.
Конечно, это все догадки, и мне так же любопытно, как и вам знать "реальный ответ".