2013-07-04 65 views
0

標題說明了所有情況。我試圖寫一個腳本,VBA,讓我來訪問內部運行,它會導出所有的數據庫表作爲單獨的表成和Excel的同名文件作爲數據庫:將具有多個表格的Access數據庫導出到包含多張工作表的Excel中

Sub exportTablesToXLS() 
    Dim td As DAO.TableDef, db As DAO.Database 
    Dim out_file As String 

    out_file = CurrentProject.Path & "\" & db.DatabaseName & ".xls" 

    Set db = CurrentDb() 
    For Each td In db.TableDefs 
     If Left(td.Name, 4) = "MSys" Then 
      'We do not need MSys tables in excel file 
     Else 
      DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _ 
      td.Name, out_file, True, Replace(td.Name, "dbo_", "") 'We do not need dbo prefix in sheetnames 
     End If 
    Next 
End Sub 

問題我有我想你的幫助:

  • 看到行out_file - > db.DatabaseName返回一個錯誤。我怎樣才能正確獲取當前Access數據庫的數據庫名稱?
  • 我想輸出一個日誌文件(簡單文本文件)。如何爲每個數據庫表讀取已導出的行數並報告發生的最終錯誤?

任何幫助,以改善這個腳本是極大的讚賞:-)

回答

0

分貝變量不引用當前數據庫(還沒有 - 它被設置在下面的行),並且屬性爲Name(我還沒有遇到DatabaseName):

Sub Test() 
    Dim db As DAO.Database 
    Set db = CurrentDb 
    Dim sLast As String 

    MsgBox db.Name 
    'F:\Documents and Settings\student\My Documents\Staff Database.accdb 
    sLast = InStrRev(db.Name, "\") 
    MsgBox Right(db.Name, Len(db.Name) - sLast) 
    'Staff Database.accdb 
End Sub 

名稱給人的完整路徑和文件名,第二MSGBOX降低這不僅是文件名。 (有可能是另一種方式來獲得的文件名而不必解析Name ..)

要獲得出口,你可以打開該桌一Recordset,讀RecordCount財產的行數。文本文件可以使用FileSystemObject對象創建。示例代碼:

Set fso = CreateObject("Scripting.FileSystemObject") 

Set oFile = FSO.CreateTextFile(strPath) 
oFile.WriteLine "test" 
oFile.Close 

,甚至只是簡單的文件(VBA)I/O:

Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength] 

(該FileSystemObject是更容易使用)

要報告你需要的錯誤創建您自己的錯誤處理例程和錯誤記錄過程。之前已經完成了這項工作,稍微搜索就會發現一些代碼。實質上,每個(重要的)事件都有調用記錄過程的錯誤處理代碼。此過程會在表格中創建一條記錄以存儲所有相關信息:日期,時間,表單已打開等。

快速Google發現this page有關日誌記錄訪問錯誤。

相關問題