Задача
Внешняя программа постоянно создает небольшие файлы базы данных .mdb.Данные из таблиц базы данных должны быть загружены в STATA для обработки данных.
Рабочий процесс, который я создал до сих пор, таков:
- Шаг 1. Использование макроса VBA (вДоступ) для извлечения таблиц в листы в книге Excel
- Шаг 2. Использование другого макроса VBA (в Excel) для очистки переменных для импорта STATA
- Шаг 3. Использование плагина xls2dta (в STATA), чтобы объединить листы в один файл .dta
Я могу сделать это для одного файла за раз, но я хотел бы сделать это в папке до 100 .mbd-файлов за один прогон.
(Этот вопрос касается, в частности, шага 1, но я добавил остальное в качестве контекста. Если у вас есть лучший или более прямой маршрут для выполнения основной задачи, пожалуйста,меня знают в комментарии).
Рабочий код для шага 1 для одного файла:
Ниже приведен макрос VBA, который я использую для создания .xls для одного файла (aмодифицированная версия кода из этого ответа: https://stackoverflow.com/a/13248627/1685346):
Sub exportTables2XLS()
Dim table As DAO.TableDef, database As DAO.Database
Dim filePath As String, file As String, outFile As String
filePath = CurrentProject.Path
file = CurrentProject.Name
Set database = CurrentDb()
'Export all tables to outFile
outFile = filePath & "\" & Left(file, Len(file) - 4) & ".xls"
For Each table In database.TableDefs
If Left(table.Name, 4) = "MSys" Then
'Do nothing -- Skip system tables
Else
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
table.Name, outFile, True, Replace(table.Name, "dbo_", "")
End If
Next
End Sub
Почти рабочий код для шага 1 в виде пакетной операции
Цикл по папке с Dir
дает следующее:
Sub batchExportTables2XLS()
Dim table As DAO.tabledef, database As DAO.database
Dim file As String, filePath As String, outFile As String
Dim wrkAcc As Object
filePath = CurrentProject.Path
file = Dir(filePath & "/*.mdb")
Do Until file = ""
Set wrkAcc = CreateWorkspace("", "admin", "", dbUseJet)
Set database = wrkAcc.OpenDatabase(file)
'Export all tables to outFile
outFile = filePath & "\" & Left(file, Len(file) - 4) & ".xls"
For Each table In database.TableDefs
If Left(table.Name, 4) = "MSys" Then
'Do nothing -- Skip system tables
Else
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
table.Name, outFile, True, Replace(table.Name, "dbo_", "")
End If
Next
file = Dir()
Loop
End Sub
Этот макрос создает файл .xls для каждого .mdb впапку, но все они содержат листы, соответствующие таблицам в .mdb, из которого выполняется макрос.Я чувствую, что это очень близко, но как я могу получить код для получения правильного вывода?