2013-06-06 4 views
4

У меня есть приложение 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 
+0

Можете ли вы сохранить на компьютере более старую версию Excel и использовать ее более старые функции SaveAs DBase? –

+0

Спасибо за ответ Тоби. Это было бы возможно, но в любой форме правительственной работы у вас есть политики, которые вы должны постоянно обновлять ПО/оборудование ... :) В любом случае, вся идея dBase была отменена в пользу перехода формы Excel в файл TXT с фиксированной шириной. Похоже, что оба работают для будущей справки! –

+0

Мне нравится, что правительственные политики заставляют вас обновлять свою копию Office, но не вашу базу данных! Возможно, вам следует перейти в современную базу данных (mariadb, mysql, mssql, sqlite, даже MS ACCESS), а не Excel, которая не является базой данных. Просто мысль. –

ответ

0

Вы можете подключиться к целевой Dbase IV файла через ADO: ADO.NET OleDB and very old dBASE IV file

После того, как у вас есть подключение к Dbase IV, вы можете использовать один и тот же код, который используется для загрузки данных из Excel для доступа к вместо этого загрузите данные в Dbase IV.

Смежные вопросы