在文件夹中的所有 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" 到我的文件夹的实际路径。再次感谢您!
哦,不好意思,我更新一下,忘记create
FS对象了。
我想它快到了,我只是不确定如何在操作中的DoCmd.TransferText
语句中使用变量MyFile
。具体来说,如何在 MyFile 中的表上运行该命令(这些表都名为“tblSCTurCount”)。我还编辑了原始帖子以显示我当前的代码是什么样的
您使用的是 Access 还是 Excel?我不明白你想做什么。 DoCmd
是什么?
MyFile
是目录中的文件之一。它有很多你可以用MyFile.
看到的属性(在MyFile 后面输入一个句点)。它具有Name
、Path
和其他您可以获得的属性。以上是关于在文件夹中的所有 Access 文件中运行 Access VBA的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft Access 2010 打开目录中的所有文件
将文件夹中的所有文件(所有 excel 文件)导入到 access 数据库中的单个表中
如何在 C# 中使用 OleDB 列出 MS Access 文件中的所有查询?