Существует системная таблица под названием «MSysObjects», в которой хранятся сведения обо всех объектах в текущей базе данных. Вы можете использовать это вместе с короткой функцией VBA, чтобы получить необходимую информацию.
Сначала вставьте этот код VBA в модуль:
Function fCountColumn(strTable) As String
On Error GoTo E_Handle
fCountColumn = DBEngine(0)(0).TableDefs(strTable).Fields.Count
fExit:
On Error Resume Next
Exit Function
E_Handle:
MsgBox Err.Description & vbCrLf & vbCrLf & "fCountColumn", vbOKOnly + vbCritical, "Error: " & Err.Number
Resume fExit
End Function
Затем создайте запрос и задайте для SQL значение:
SELECT [Name], fCountColumn([Name]) AS ColumnCount
FROM MSysObjects
WHERE [Type]=1 AND [Flags]=0
ORDER BY [Name] ASC;
Это возвращает только собственные таблицы доступа - для других таблиц вам нужно будет добавить флаги и тип, которые запрашиваются.
Альтернативным способом, отличным от SQL, было бы l oop коллекцию TableDefs в VBA и снова использовать свойство .Fields.Count
каждого TableDef.
С уважением,