在文件夹中的所有 Access 文件中运行 Access VBA

Posted

技术标签:

【中文标题】在文件夹中的所有 Access 文件中运行 Access VBA【英文标题】:Run Access VBA in all Access files in folder 【发布时间】:2015-07-06 15:39:14 【问题描述】:

我一直在尝试找出一种方法,可以在文件夹中的所有文件上运行以下 VBA 代码,而无需手动打开每个文件。

这是我现在的代码(将所需的表导出为分隔的 txt 文件,包括列名):

Private Sub Command4_Click()

    Dim MyObj, MySource As Object, File As Variant, stDocName As String, Counter As Integer

    On Error GoTo Err_Command4_Click
        Dim stDocName As String, Counter As Integer
        Counter = 1
        stDocName = "tblSCTurCount"
        DoCmd.TransferText acExportDelim, "", stDocName, "C:\Users\name\Downloads\cnt\cnt_output.txt", True

    Exit_Command4_Click:
        Exit Sub

    Err_Command4_Click:
        MsgBox Err.Description
        Resume Exit_Command4_Click

End Sub

在研究问题时,我发现a process 在 excel 中有效,但我不确定如何在访问中更改变量,尤其是工作簿引用。

谢谢!

编辑——有效的代码:

Dim FS As FileSystemObject
Set FS = New FileSystemObject
Dim MyFolder As Folder
Set MyFolder = FS.GetFolder("C:\Users\name\Downloads\cnt\Folder")
Dim MyFile As File
Set appAccess = CreateObject("Access.Application")

For Each MyFile In MyFolder.Files
    appAccess.OpenCurrentDatabase (MyFile.Path)
    appAccess.Visible = True
    NewFileName = MyFile.Path & ".txt"
    appAccess.DoCmd.TransferText acExportDelim, "", "tblScTurCount", NewFileName, True
    appAccess.CloseCurrentDatabase
Next

【问题讨论】:

但是我没有完全理解。您使用的是 Access 还是 Excel? 【参考方案1】:

考虑使用FileSystemObject

为此,您必须添加 reference Microsoft Scripting Runtime 库。 (在 VBA 编辑器中转到工具 > 引用...)

Sub test()
    Dim FS As FileSystemObject
    Set FS = New FileSystemObject

    Dim MyFolder As Folder
    Set MyFolder = FS.GetFolder("C:\path\of\the\folder")

    Dim MyFile As File
    For Each MyFile In MyFolder.Files
        'do what you want to do with each file

        'to use the file name:
        MyFile.Name

        'I suppose you have to:
        Application.OpenCurrentDatabase MyFile.Path
        '(please verify if this path contains the filename and extension too). 

         'But create a different filename for each txt:
         NewFileName = MyFile.Path + ".txt"

        'Then you do:
        DoCmd.TransferText acExportDelim, "", "tblScTurCount", NewFileName, True

    Next
End Sub

考虑到您在 Access 中使用 VBA,请使用 Application.OpenAccessProject 或 Application.OpenCurrentDatabase 方法在 Access 中打开文件。

【讨论】:

感谢您的建议。不幸的是,在Set MyFolder = FS.GetFolder("C:\path\of\the\folder") 我收到“运行时错误'91':对象变量或未设置块变量”作为参考,我添加了 Microsoft 脚本运行时库并更改了“C:\path\of\the \folder" 到我的文件夹的实际路径。再次感谢您! 哦,不好意思,我更新一下,忘记createFS对象了。 我想它快到了,我只是不确定如何在操作中的DoCmd.TransferText 语句中使用变量MyFile。具体来说,如何在 MyFile 中的表上运行该命令(这些表都名为“tblSCTurCount”)。我还编辑了原始帖子以显示我当前的代码是什么样的 您使用的是 Access 还是 Excel?我不明白你想做什么。 DoCmd 是什么? MyFile 是目录中的文件之一。它有很多你可以用MyFile. 看到的属性(在MyFile 后面输入一个句点)。它具有NamePath 和其他您可以获得的属性。

以上是关于在文件夹中的所有 Access 文件中运行 Access VBA的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft Access 2010 打开目录中的所有文件

MS Access 应用程序需要登录用户/密码

将文件夹中的所有文件(所有 excel 文件)导入到 access 数据库中的单个表中

如何在 C# 中使用 OleDB 列出 MS Access 文件中的所有查询?

为啥 MS-Access 中的 Teradata 查询比 SQL Server 更快

自包含 UIView 子类中的 UITapGestureRecognizer EXC_BAD_ACCESS