Tipp 0113 Excel - Komponenten/Prozeduren ermitteln
Autor/Einsender:
Datum:
  Angie
17.08.2001
Entwicklungsumgebung:   Excel 97
Über die VBE-Programmierung ist es u.a. auch möglich, direkt auf die in einer Arbeitsmappe enthaltenen Komponenten (Excel-Objekte, UserForms, Module und Klassenmodule) und den darin enthaltenen Prozeduren zuzugreifen.
Mit der ProcStartLine-Eigenschaft wird die Zeile zurückzugeben, an der die jeweilige Prozedur in einem bestimmten Code-Bereich beginnt. Die erste Code-Zeile wird mit der ProcBodyLine-Eigenschaft und die Anzahl der Zeilen mit der ProcCountLines-Eigenschaft ermittelt. Wie in diesem Download-Beispiel ersichtlich, ist die Anzahl der Zeilen einer Prozedur nicht unbedingt identisch mit der Anzahl der Code-Zeilen. Die hier ermittelten Angaben werden auf dem aktiven Arbeitsblatt aufgelistet.
 
Option Explicit

Public Sub Start_KomponentenErmitteln()

  Dim vbaProjekt As Object
  Dim vbaKomponente As Object
  Dim anzKomponenten As Integer

  Dim vbaProzedur As Object
  Dim prozedurName As String
  Dim anzProzeduren As Integer
  Dim zEndSub As String

  Dim startZ As Long
  Dim bodyZ As Long
  Dim anzZ As Long
  Dim anzC As Long

  Dim z As Integer
  Dim i As Integer
  Dim j As Integer

  anzKomponenten = 0
  anzProzeduren = 0
  z = 2

  Set vbaProjekt = ActiveWorkbook.VBProject.VBComponents

  For Each vbaKomponente In vbaProjekt
    z = z + 1

    Select Case vbaKomponente.Type
      Case 1: Cells(z, 1) = "Modul"
      Case 2: Cells(z, 1) = "Klassenmodul"
      Case 3: Cells(z, 1) = "Formular"
      Case 100: Cells(z, 1) = "Microsoft Excel Objekt"
    End Select

    Set vbaProzedur = vbaProjekt(vbaKomponente.Name).CodeModule
    Cells(z, 2) = vbaKomponente.Name
    anzKomponenten = anzKomponenten + 1

    With vbaProzedur

      For i = 1 To .CountOfLines
        If .ProcOfLine(i, vbext_pk_Proc) <> "" Then
          prozedurName = .ProcOfLine(i, vbext_pk_Proc)
          anzProzeduren = anzProzeduren + 1

          startZ = .ProcStartLine(prozedurName, vbext_pk_Proc)
          bodyZ = .ProcBodyLine(prozedurName, vbext_pk_Proc)
          anzZ = .ProcCountLines(prozedurName, vbext_pk_Proc)

          For j = bodyZ To .CountOfLines
            zEndSub = Trim(.Lines(j, 1))
            If (Left(zEndSub, 7)) = "End Sub" Or _
               (Left(zEndSub, 12)) = "End Function" Then
              anzC = j - bodyZ + 1
              Exit For
            End If
          Next

          Cells(z, 3) = prozedurName
          Cells(z, 4) = startZ
          Cells(z, 5) = bodyZ
          Cells(z, 6) = anzC
          Cells(z, 7) = anzZ
          z = z + 1

          i = i + anzZ
        End If
      Next
    End With
    z = z + 1
  Next

  ActiveSheet.Columns("A:C").AutoFit

  MsgBox "In der Arbeitsmappe '" & ActiveWorkbook.Name & _
         "' sind " & vbCrLf & _
         anzKomponenten & " Komponenten und " & _
         anzProzeduren & " Prozeduren enthalten !", _
         vbOKOnly + vbInformation, Title:="Komponenten ermitteln"

End Sub
 
Hinweis
Für die VBE-Programmierung ist das Einbinden der Objektbibliothek Visual Basic For Applications Extensibility 5.3 notwendig.
Weitere Links zum Thema
Module exportieren/importieren

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
Excel-Version
95
97
2000
2002 (XP)
2003
2007
2010


Download  (17,2 kB) Downloads bisher: [ 1204 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Sonntag, 10. Juli 2011