[英]Run VBA Code in Excel to obtain VBA in Access Databases
我想在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
以下代碼將使您看到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
我能夠找到一些有助於最終目標的代碼:將MS Access表單和類/模塊遞歸導出到文本文件?
以下是最重要的幾行,它們將使我在項目上取得進展。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.