0

标题说明了一切。我正在尝试编写一个允许我在 Access 中运行的 VBA 脚本,它将所有数据库表作为单独的工作表导出到与数据库同名的 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

我遇到的问题希望得到您的帮助:

  • 见 line out_file-> db.DatabaseName 返回错误。如何正确获取当前 Access 数据库的数据库名称?
  • 我也想输出一个日志文件(简单的文本文件)。对于每个数据库表,我如何读取已导出的行数并报告最终发生的错误?

非常感谢改进此脚本的任何帮助:-)

4

1 回答 1

0

您的db变量没有引用当前数据库(但是 - 它在以下行中设置),并且属性是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

Name 给出完整的路径和文件名,第二个 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更容易使用)

要报告错误,您需要创建自己的错误处理例程和错误记录程序。这已经在之前完成了,稍微搜索一下就会发现一些代码。本质上,每个(重要的)事件都有调用日志记录过程的错误处理代码。此过程在表中创建一条记录以存储所有相关信息:日期、时间、打开的表单等。

一个快速的谷歌发现了这个关于记录访问错误的页面。

于 2013-07-05T18:24:43.257 回答