VBA-Handling in der Entwicklungsumgebung

VBE.MainWindow, VBProject.VBComponents, CodeName
Entwicklungsumgebung (EU) wechselweise Sub Ein_Ausblenden()
ein- und ausblenden (das Makro eventuell  If Application.VBE.MainWindow.Visible = True Then
einer Schaltfläche zuweisen).   Application.VBE.MainWindow.Visible = False
Alternativ kann die EU mit ALT & F11  Else
aufgerufen werden.   Application.VBE.MainWindow.Visible = True
 End If
End Sub
   
Einer Arbeitsmappe fünf Blätter hinzufügen, hinten Sub Hinzufuegen()
anhängen und Blattnamen vergeben Dim i%
 For i = 1 To 5
   ActiveWorkbook.Sheets.Add.Move After:=Worksheets(Worksheets.Count)
   ActiveSheet.Name = "Blatt" & i
 Next i
 Worksheets(1).Select
End Sub
   
VBProject-Codenamen für alle Arbeitsblätter Sub VBProjectCodename()
vergeben Dim i%, n%, nam$
n = ActiveWorkbook.Worksheets.Count
 For i = 1 To n
   ActiveWorkbook.Worksheets(i).Select
   nam = ActiveWorkbook.Worksheets(i).CodeName
   'Der VBProject-Codename darf nicht numerisch sein!
   ActiveWorkbook.VBProject.VBComponents(ActiveWorkbook.Worksheets(i). _
     CodeName).Name = "T" & ActiveWorkbook.Worksheets(i).Name
 Next i
 ActiveWorkbook.Worksheets(1).Select
End Sub
   
In einer neuen Arbeitsmappe werden alle Sub ProzedurListen()
Prozedurennamen der aktiven Arbeitsmappe Dim TB As Worksheet, Komponente As VBComponent
gelistet (nicht der VBA-Code!) Dim c%, R%, i%, Anfang%, Ende%, Makro$
 Workbooks.Add
 Set TB = ActiveSheet
 For Each Komponente In ThisWorkbook.VBProject.VBComponents
  If Komponente.Type = vbext_ct_ClassModule Or _
     vbext_ct_Document Or vbext_ct_StdModule Then
   R = 1
   c = c + 1
   TB.Cells(R, c) = Komponente.Name
   TB.Cells(R, c).Font.Bold = True
   With Komponente.CodeModule
    For i = 1 To .CountOfLines
     If .ProcOfLine(i, vbext_pk_Proc) > "" Then
      Makro = .ProcOfLine(i, vbext_pk_Proc)
      If Makro <> TB.Cells(R, c) Then
        R = R + 1
        TB.Cells(R, c) = Makro
      End If
     End If
    Next i
   End With
  End If
 Next Komponente
 TB.Columns.AutoFit
End Sub
   
Der gesamte VBA-Code der aktiven Mappe Sub ModulDrucken()
wird in neue Worksheets (oder Textdateien) Dim i%, n%, sCode$
exportiert Application.ScreenUpdating = False
 n = ActiveWorkbook.VBProject.VBComponents.Count
 For i = 1 To n
'  ActiveWorkbook.VBProject.VBComponents(i).Export "E:\Test" & i & ".xls"
  ActiveWorkbook.VBProject.VBComponents(i).Export "E:\Test" & i & ".txt"
 Next i
Application.DisplayAlerts = False
End Sub
   
Eine Prozedur wird aufgerufen und Sub ProzedurAufrufen()
nach dem Aufruf gelöscht Dim Komponente As CodeModule
Dim Startzei&, Endzeile%
  Set Komponente = ThisWorkbook.VBProject. _
     VBComponents("modMain").CodeModule
  Startzei = Komponente.ProcBodyLine("Meldung", vbext_pk_Proc)
  Endzeile = Komponente.ProcCountLines("Meldung", vbext_pk_Proc)
  Komponente.DeleteLines Startzei, Endzeile
End Sub
   
Alle Allgemeinen und Klassenmodule Sub ModuleAlleKopieren()
dieser Arbeitsmappe werden in eine Dim WB As Workbook
neue Arbeitsmappe kopiert Dim Vbc As VBComponent
Dim Comp()
Dim i%
Dim dName$
 Set WB = Workbooks.Add
 For Each Vbc In ThisWorkbook.VBProject.VBComponents
  If Vbc.Type = vbext_ct_ClassModule Then
    i = i + 1
    dName = "Tmp" & i & ".cls"
    ReDim Preserve Comp(i)
    Comp(i) = dName
    Vbc.Export dName
  ElseIf Vbc.Type = vbext_ct_StdModule Then
    i = i + 1
    dName = "Tmp" & i & ".bas"
    ReDim Preserve Comp(i)
    Comp(i) = dName
    Vbc.Export dName
  End If
 Next Vbc
 For i = 1 To UBound(Comp)
   WB.VBProject.VBComponents.Import Comp(i)
   Kill Comp(i)
 Next i
End Sub
   
Erstellt eine neue Arbeitsmappe und Sub MakroKopieren()
kopiert EIN bestimmtes Makro aus Dim WB As Workbook
dieser Mappe in die neue Mappe Dim Komponente As CodeModule
Dim Startzei&
Dim Endzeile%
Dim Txt$
 Set WB = Workbooks.Add
 Set Komponente = WB.VBProject.VBComponents. _
     Add(vbext_ct_StdModule).CodeModule
 With ThisWorkbook.VBProject.VBComponents("modMain").CodeModule
   Startzei = .ProcBodyLine("TestMakro", vbext_pk_Proc)
   Endzeile = .ProcCountLines("TestMakro", vbext_pk_Proc)
   Txt = .Lines(Startzei, Endzeile)
 End With
 Komponente.AddFromString Txt
 Application.Visible = True
End Sub
   
Module und Code aus Arbeitsmappe Function bRemoveAllCode(ByVal szBook As String) As Boolean
entfernen Dim objCode As Object, objComponents As Object
Dim lCount As Long, wkbBook As Workbook
Const lModule As Long = 1
Const lOther As Long = 100
On Error GoTo bRemoveAllCodeError
Set wkbBook = Workbooks(szBook)
Set objComponents = wkbBook.VBProject.VBComponents
lCount = wkbBook.VBProject.VBComponents.Count
For Each objCode In objComponents     'Entfernt Module und Code
  If objCode.Type = lModule Then
    objComponents.Remove objCode
  ElseIf objCode.Type = lOther Then
    objCode.CodeModule.DeleteLines 1,
    objCode.CodeModule.CountOfLines
  End If
Next objCode
bRemoveAllCode = True
Exit Function
bRemoveAllCodeError:
bRemoveAllCode = False
End Function
Sub PrepBook()
If Not bRemoveAllCode(ActiveWorkbook.Name) Then _
   MsgBox "Error!", vbCritical,"bRemoveAllCode"
  End Sub

 Ranking-Hits zurück Sitemap
Designed by www.wbrnet.info