在Excel中运行VBA代码以获取Access数据库中的VBA
我想在Excel中创建一个程序,在Access数据库列表中循环,并写入Access模块中存在的VBA。我发现了一些可以从Access运行的代码,这些代码编写了Access模块中存在的VBA。我试图找出如何从Excel中引用数据库文件,并在每个数据库文件上运行该程序。我可能会想出如何循环遍历数据库文件。我只需要以下代码中引用数据库文件的帮助 我可以用如下方式打开数据库:在Excel中运行VBA代码以获取Access数据库中的VBA,vba,excel,ms-access,Vba,Excel,Ms Access,我想在Excel中创建一个程序,在Access数据库列表中循环,并写入Access模块中存在的VBA。我发现了一些可以从Access运行的代码,这些代码编写了Access模块中存在的VBA。我试图找出如何从Excel中引用数据库文件,并在每个数据库文件上运行该程序。我可能会想出如何循环遍历数据库文件。我只需要以下代码中引用数据库文件的帮助 我可以用如下方式打开数据库: Dim cstrDbFile As String = "C:\Database51.accdb" Dim objShell As
Dim cstrDbFile As String = "C:\Database51.accdb"
Dim objShell As Object
Set objShell = CreateObject("WScript.Shell")
objShell.Run cstrDbFile
Dim appAccess As Object
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase ("C:\Database51.accdb")
我还尝试设置访问的引用,如下所示:
Dim cstrDbFile As String = "C:\Database51.accdb"
Dim objShell As Object
Set objShell = CreateObject("WScript.Shell")
objShell.Run cstrDbFile
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
下面的代码将让您看到Access数据库对象,但我不知道如何导出代码(DoCmd不在Excel中?)。你的任务将非常简单,从访问,所以我会重新考虑
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
我能够找到一些代码来帮助我实现最终目标: 下面是最重要的几行,它们将使我能够在项目中取得进展
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
VbComponent有一个导出方法,该方法比在每个模块的每一行中循环要快得多。