在 Excel 中运行 VBA 代码以获取 Access 数据库中的 VBA
Posted
技术标签:
【中文标题】在 Excel 中运行 VBA 代码以获取 Access 数据库中的 VBA【英文标题】:Run VBA Code in Excel to obtain VBA in Access Databases 【发布时间】:2015-02-04 18:11:55 【问题描述】:我想在 Excel 中创建一个程序,该程序循环访问 Access 数据库列表并编写 Access 模块中存在的 VBA。我找到了一些可以从 Access 运行的代码,这些代码编写了 Access 模块中存在的 VBA。我试图弄清楚如何从 Excel 中引用数据库文件并在每个数据库文件上运行程序。我可能能够弄清楚如何遍历数据库文件。我只需要在下面的代码中引用数据库文件的帮助。
我可以这样打开数据库:
Dim cstrDbFile As String = "C:\Database51.accdb"
Dim objShell As Object
Set objShell = CreateObject("WScript.Shell")
objShell.Run cstrDbFile
我还尝试像这样设置对 Access 的引用:
Dim appAccess As Object
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase ("C:\Database51.accdb")
我需要弄清楚如何在以下位置引用 Access 数据库:
Application.VBE.ActiveVBProject.VBComponents
我可能需要弄清楚如何创建一个引用来替换 ActiveVBProject。
下面是我找到的一些代码,它写入了 VBA 模块的内容。我不记得我在哪里找到的。
For Each Component In Application.VBE.ActiveVBProject.VBComponents
With Component.CodeModule
'The Declarations
For Index = 1 To .CountOfDeclarationLines
Debug.Print .Lines(Index, 1)
Next Index
'The Procedures
For Index = .CountOfDeclarationLines + 1 To .CountOfLines
Debug.Print .Lines(Index, 1)
Next Index
End With
Next Component
【问题讨论】:
VbComponent 有一个导出方法,它比遍历每个模块中的每一行要快得多。 christopherjmcclellan.wordpress.com/2014/10/10/vba-and-git 【参考方案1】:下面的代码可以让你看到 Access 数据库对象,但是我不知道如何导出代码(DoCmd 不在 Excel 中?)。通过 Access 完成您的任务将非常简单,所以我会重新考虑...
Option Explicit
' Add a reference to the DAO Object Library
Sub Read_Access_VBA()
Dim dbs As DAO.Database
Dim ctr As DAO.Container
Dim doc As DAO.Document
Dim iC As Integer
Dim iD As Integer
Dim i As Integer
Dim mdl As Module
Set dbs = DBEngine.OpenDatabase("c:\TEMP\106thRoster.mdb", False, False, _
"MS Access;")
Debug.Print "----------------------------------------"
For iC = 0 To dbs.Containers.Count - 1
Debug.Print "Container: " & dbs.Containers(iC).Name
If dbs.Containers(iC).Documents.Count > 0 Then
For iD = 0 To dbs.Containers(iC).Documents.Count - 1
Debug.Print vbTab & "Doc: " & dbs.Containers(iC).Documents(iD).Name
Next iD
Else
Debug.Print " No Documents..."
End If
Next iC
'Set ctr = dbs.Containers!Modules
dbs.Close
Set doc = Nothing
Set ctr = Nothing
Set dbs = Nothing
End Sub
【讨论】:
【参考方案2】:我找到了一些可以帮助我实现最终目标的代码:Exporting MS Access Forms and Class / Modules Recursively to text files?
以下是最重要的几行,可以让我在项目中取得进展。
LineCount = oApp.Forms(Name).Module.CountOfLines
FileName = Path & "\" & Name & ".vba"
F = FreeFile
Open FileName For Output Access Write As #F
Print #F, oApp.Forms(Name).Module.Lines(1, LineCount)
Close #F
【讨论】:
以上是关于在 Excel 中运行 VBA 代码以获取 Access 数据库中的 VBA的主要内容,如果未能解决你的问题,请参考以下文章
使用 VBA 在 Excel 中的 SQL 表上使用参数化查询