Code Auslesen - Code durch Code Bearbeiten - Die VBE
Dies ist ein kurzer Abriss über den Zugriff per Code auf Code.
Ich setze hier den voraus, dass Sie mit VBA sehr gut vertraut sind!
VBA bietet uns ein Object an, mit welcher wir auf das VBA Project zugreifen können.
Dies ist die VBE: Visual Basic for Extensibility.
Bevor wir überhaupt darauf zugreifen können, müssen wir in unserem Project, in welchem wir den Codezugriff schreiben wollen, einen Verweis auf die
Microsof Visual Basic for Applications Extensibility 5.3
setzen. (Unter Extras Verweise)
Damit ist es aber nicht getan!
Wichtige Hinweise:
Ab Excel XP(2002) müssen Sie auch noch in Excel selbst unter Makros - Sicherheit - Register Vertrauenswürdige Quellen den Zugriff auf das Visual Basic Projekt erlauben.
Und hier sehen wir gleich ein großes Problem:
Wenn wir an anderen Rechnern dies ausführen lassen wollen, können wir dies nicht voraussetzen.
Ein weiteres Problem ist der Projektschutz, sofern vorhanden.
Ich kann nur auf ungeschützte Projekte zugreifen.
Testen kann ich dies über:
Application.VBE.VBProjects("DasProjekt").Protection
Die VBA Hilfe ist ansonsten recht gut zu diesem Thema.
Damit Sie aber einen Einstieg in das Thema haben, habe ich im Anschluss für Sie einen Beispielcode,
den Sie nach und nach ausprobieren können.
Kopieren Sie diesen Code in ein Allgemeines Modul mit dem Modulnamen: Modul1
(Beachten Sie die obigen wichtigen Hinweise)
Der Beispielcode ist so aufgebaut:
Zwischen zwei Kommentaren, die mit ### beginnen, steht immer ein Codeblock zum testen.
D.h. Sie können diesen Codeblock auskommentieren und dann testen.
Bevor Sie aber den nächsten Block testen, sollten Sie den ersten Block wieder einkommentieren.
Wenn Sie damit ein wenig rumspielen, werden Sie schnell ein Gefühl dafür bekommen und sich die weiteren Objekte der VBE erarbeiten können.
Und jetzt viel Spaß beim Makro "Makroieren"
Option Explicit
Private Sub CodeBearbeiten()
' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
' Benötigt einen Verweis auf die
' Microsof Visual Basic for Applications Extensibility 5.3
' Der Zugriff auf das VBA Projekt muss erlaubt sein
' Dieser Code in einem allgemeinen Modul mit Namen im Modul1
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dim oVBProject As New VBIDE.VBProject, OVbComp As VBComponent
Dim iCompCount As Integer, iCodeLines As Long, sText As String
Dim iProcStart As Long, iProcEnde As Long, iProcChange As Long
Dim iFindStartCol As Long, iFindEndCol As Long, iFindRow As Long
' Wir greifen auf das Projekt dieser Arbeitsmappe zu
Set oVBProject = ThisWorkbook.VBProject
With oVBProject
' ########## Mal gucken was drin ist
''For iCompCount = 1 To .VBComponents.Count
''Debug.Print iCompCount; " - "; .VBComponents(iCompCount).Name
''Next iCompCount
' ########## Jetzt mal unser CodeModul bearbeiten
Set OVbComp = .VBComponents("Modul1")
End With
With OVbComp.CodeModule
' ####### Einen Kommentar nach oben
'' .AddFromString ("'Wir fügen einen Kommentar ein")
iCodeLines = .CountOfLines
' ############## Oder Kommentar unten
''.InsertLines iCodeLines + 1, "'Und jetzt den Kommentar unten"
' ######## Oder eine Prozedur
''sText = "Private Sub MachMal()" & vbCrLf & _
''" MsgBox ""Hallo""" & vbCrLf & _
''"End Sub" & vbCrLf & _
''"" & vbCrLf & _
''""
''.InsertLines iCodeLines + 1, sText
' ######## Gucken wir uns selbst an
''iProcStart = .ProcStartLine("CodeBearbeiten", vbext_pk_Proc)
''iProcEnde = .ProcCountLines("CodeBearbeiten", vbext_pk_Proc)
''Debug.Print .Lines(iProcStart, iProcEnde - iProcStart - 1)
' ######## Und jetzt mal die MsgBox verändern unserer TestAenderung
''iProcStart = .ProcStartLine("TestAenderung", vbext_pk_Proc)
''iProcEnde = .ProcCountLines("TestAenderung", vbext_pk_Proc)
''iFindStartCol = -1: iFindEndCol = -1
''If .Find("MsgBox ""Hallo""", iProcStart, iFindStartCol, _
iProcEnde, iFindEndCol) Then
''.ReplaceLine iProcStart, "MsgBox(""Aber Jetzt"")"
''End If
' ############# Ende unserer Tests
End With
End Sub
Sub TestAenderung()
MsgBox ("Hallo")
End Sub