gpt4 book ai didi

vba - 在正确的范围内获取 DoCmd 或替代导出数十个 Access 数据库中的所有表

转载 作者:行者123 更新时间:2023-12-04 08:19:02 27 4
gpt4 key购买 nike

我想要做的很简单:

  • 遍历所有 .accdb目录中的文件
  • 打开它们并将所有表导出到单独的 .xlsx文件

  • 我遇到的问题是 DoCmd 的范围我很难改变它。问题出现了,因为我从基本上是空的 Database1.accdb 运行 VBA .当 VBA 到达 DoCmd.TransferSpreadsheet ,它正在使用 CurrentDb而不是用 OpenDatabase 打开的 Access 文件.据说一个明显可以看到的表( Debug.Print(tbl.Name) 有效)不存在。
    见下文:
    Option Compare Database

    Public Const PROJECT_PATH = "\\192.168.1.2\Migration\"
    Public Const DESC_PATH = PROJECT_PATH & "Descriptions\"
    Public Const DESC_DB_PATH = DESC_PATH & "DBs\"
    Public Const DESC_EXPORTS = DESC_PATH & "Exports\"
    Sub ExportDescriptionTables()

    Dim wrkSpace As Workspace, _
    db As Database, _
    tbl As TableDef

    ' ************************** TEMPLATE FILES - BEGIN *************************
    Set dbDirObj = CreateObject("Scripting.FileSystemObject")
    Set dbFolder = dbDirObj.GetFolder(DESC_DB_PATH)
    Set dbFiles = dbFolder.Files
    ' ************************** TEMPLATE FILES - END ***************************

    ' Create the Access object for this file
    Set wrkSpace = CreateWorkspace("", "admin", "", dbUseJet)

    ' Iterate through each Access file
    For Each dbFile In dbFiles

    ' Open each Access database file
    Set db = wrkSpace.OpenDatabase(DESC_DB_PATH & dbFile.Name)

    ' Iterate through each table
    For Each tbl In db.TableDefs

    ' Export based on the table name matching specific criteria
    If Left(tbl.Name, 1) <> "~" And Left(tbl.Name, 4) <> "MSys" Then

    Debug.Print (tbl.Name)
    ' ################### THIS WHERE THE ERROR OCCURES ##############
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, tbl.Name, DESC_EXPORTS & tbl.Name & dbFile.Name, True, tbl.Name
    End If

    Next tbl

    ' Close database
    db.Close

    ' Clear out access object for this file
    Set db = Nothing
    Next dbFile

    End Sub
    所以我的问题:
  • 有没有一种方法我根本没有看到设置 DoCmd 的范围?
  • 如果没有,有什么更好的方法来解决这个问题(也许从 Excel 运行可能会迫使 CurrentDb 成为唯一打开的 Access DB,这应该使 DoCmd 进入适当的范围)?
  • 最佳答案

  • 没有。总想着DoCmd作为用户可以通过用户界面执行的操作。
  • 当找到要导出的数据库和其中的表时,将此/这些链接到主数据库(使用 DoCmd.TransferDatabase ),然后导出每个链接表并在之后将其删除。
  • 关于vba - 在正确的范围内获取 DoCmd 或替代导出数十个 Access 数据库中的所有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65584435/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com