У меня есть приложение Excel, в котором пользователи добавляют/редактируют/и т. Д. данные. Когда они готовы, они экспортируют эти данные, конечный результат должен быть файлом dBase. Поскольку Excel 2007 больше не имеет функции Save As dBase, я создал следующий код для экспорта моих данных в таблицу доступа.Экспорт таблицы доступа в файл dBase из Excel VBA?
Есть ли способ в моем VBA в Excel, чтобы перейти и передать таблицу доступа в файл dBase? Или мне нужно сделать этот шаг от самого доступа?
Я пытаюсь сохранить все в Excel, чтобы сделать возможной модификацию в будущем максимально простой. Любая помощь приветствуется. Если это возможно, было бы даже неплохо сделать от Access, если процесс можно автоматизировать в синхронизации с моим процессом экспорта.
Sub Export()
Dim dbConnection As ADODB.Connection
Dim dbFileName As String
Dim dbRecordset As ADODB.Recordset
Dim xRow As Long, xColumn As Long
Dim LastRow As Long
'Go to the worksheet containing the records you want to transfer.
Worksheets("FeedSamples").Activate
'Determine the last row of data based on column A.
LastRow = Cells(Rows.Count, 1).End(xlUp).row
'Create the connection to the database.
Set dbConnection = New ADODB.Connection
'Define the database file name
dbFileName = "\\agfiles\public\ITSD_ApDev\James Scurlock\Personal Project Notes\FeedSampleResults.accdb"
'Define the Provider and open the connection.
With dbConnection
.Provider = "Microsoft.ACE.OLEDB.12.0;Data Source=" & dbFileName & _
";Persist Security Info=False;"
.Open dbFileName
End With
'Create the recordset
Set dbRecordset = New ADODB.Recordset
dbRecordset.CursorLocation = adUseServer
dbRecordset.Open Source:="ImportedData", _
ActiveConnection:=dbConnection, _
CursorType:=adOpenDynamic, _
LockType:=adLockOptimistic, _
Options:=adCmdTable
'Loop thru rows & columns to load records from Excel to Access.
'Assume row 1 is the header row, so start at row 2.
'ACCESS COLUMNS MUST BE NAMED EXACTLY THE SAME AS EXCEL COLUMNS
For xRow = 2 To LastRow
dbRecordset.AddNew
'Assume this is an 8-column (field) table starting with column A.
For xColumn = 1 To 69
dbRecordset(Cells(1, xColumn).value) = Cells(xRow, xColumn).value
Next xColumn
dbRecordset.Update
Next xRow
'Close the connections.
dbRecordset.Close
dbConnection.Close
'Release Object variable memory.
Set dbRecordset = Nothing
Set dbConnection = Nothing
'Optional:
'Clear the range of data (the records) you just transferred.
'Range("A2:H" & LastRow).ClearContents
MsgBox "Test"
Dim access As access.Application
Set access = "\\agfiles\public\ITSD_ApDev\James Scurlock\Personal Project Notes\FeedSampleResults.accdb"
access.DoCmd.OpenTable "ImportedData"
access.DoCmd.TransferDatabase acExport, "dBASE IV", "C:\", acTable, "ImportedData", "TEST.DBF"
DoCmd.Close acTable, "ImportedData"
'CREATE dBASE FILE!
End Sub
Можете ли вы сохранить на компьютере более старую версию Excel и использовать ее более старые функции SaveAs DBase? –
Спасибо за ответ Тоби. Это было бы возможно, но в любой форме правительственной работы у вас есть политики, которые вы должны постоянно обновлять ПО/оборудование ... :) В любом случае, вся идея dBase была отменена в пользу перехода формы Excel в файл TXT с фиксированной шириной. Похоже, что оба работают для будущей справки! –
Мне нравится, что правительственные политики заставляют вас обновлять свою копию Office, но не вашу базу данных! Возможно, вам следует перейти в современную базу данных (mariadb, mysql, mssql, sqlite, даже MS ACCESS), а не Excel, которая не является базой данных. Просто мысль. –