2014-12-06 156 views
0

我想在Excel中創建一個程序,它循環訪問Access數據庫列表並寫入Access模塊​​中存在的VBA。我發現了一些可以從Access中運行的代碼,它可以編寫Access模塊​​中存在的VBA。我想弄清楚如何從Excel引用數據庫文件並在每個數據庫文件上運行該程序。我可能會弄清楚如何循環訪問數據庫文件。我只需要在下面的代碼中引用數據庫文件的幫助。在Excel中運行VBA代碼以獲取Access數據庫中的VBA

我可以像這樣打開數據庫:

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 

我可能需要弄清楚如何創建一個引用re放置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 
+1

VbComponent的導出方法比在每個模塊中循環每一行的速度快得多。 https://christopherjmcclellan.wordpress.com/2014/10/10/vba-and-git/ – RubberDuck 2014-12-07 14:02:21

回答

2

下面的代碼會讓你看到Access數據庫對象,但我不知道如何導出代碼(不在Excel中的DoCmd?)。你的任務是很簡單的從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 
0

我能找到一些代碼,這將有助於我與我的最終目標: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