Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1156to1160
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Auslesen von Dateien ob Formular, Modul

Auslesen von Dateien ob Formular, Modul
Dateien
Hallo Excel Profis,
ich habe eine sehr große Zahl an Excel-Dateien in einem Verzeichnis D:\Downloads\Excel und weiteren Unterverzeichnissen.
Jetzt möchte ich diese Dateien auslesen, ob ein Modul, ein Formular (Userform) oder/und ein Klassenmodul in der Datei enthalten ist.
Ziel ist es mal schnell zu sehen, wo man z.B. schon mal mit Formularen gearbeitet hat...
D.h. in den Spalten würde dann die Datei mit Pfad (möglichst als Hyperlink) stehen und dann eine Spalte für Module, Userforms und Klassenmodule. Vielleicht sogar noch die einzelnen Namen der Module...
Hat jemdand so was schon mal gemacht bzw. weiß wie das Geht?
Ich habe schon so etwas das Zellen ausliest:
Public Sub lesedir(Pfad1)
Dim Datei1, Name1
' Liefert einen Dateinamen mit der angegebenen Erweiterung. Existieren
' mehrere Dateien mit der Erweiterung .INI, so wird der erste gefundene
' Dateiname zurückgegeben.
Name1 = Dir(Pfad1 & "*.xls")
Do While Name1  ""  ' Schleife beginnen.
Debug.Print "x" & Name1 & "x"   ' Eintrag nur anzeigen, wenn es sich
ActiveCell.FormulaR1C1 = Pfad1 & Name1
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=Pfad1 & Name1
ActiveCell.Offset(0, 1).Range("A1").Select
formel = "=" & "'" & Pfad1 & "[" & Name1 & "]" & "text" & "'" & "!a8"
ActiveCell.Value = formel
ActiveCell.Offset(0, 1).Range("A1").Select
formel = "=" & "'" & Pfad1 & "[" & Name1 & "]" & "text" & "'" & "!a9"
ActiveCell.Value = formel
ActiveCell.Offset(0, 1).Range("A1").Select
formel = FileDateTime(Pfad1 & Name1)
ActiveCell.Value = formel
ActiveCell.Offset(1, -4).Range("A1").Select
Name1 = Dir ' Nächsten Eintrag abrufen.
Loop
End Sub

Sub loslegen()
Call lesedir("D:\herber\beispiele\")
End Sub
Da müßte man wahrscheinlich nur das mit den Modulen ergänzen?! (Ob unten das Offset -4 stimmt weiß ich nicht, ich hatte da 25 Spalten ausgelesen die ich jetzt mal aus Übersichtlichkeitsgründen gelöscht habe).
Vielen Danl für Eure Hilfe
Gruß Jens
Schau mal ins Archiv, da gibt's genug! Gruß owT
21.05.2010 18:22:44
Luc:-?
:-?
AW: Schau mal ins Archiv, da gibt's genug! Gruß owT
21.05.2010 18:55:30
jens
Hallo Luc,
vielen Dank, ich habe in das Archiv geschaut...
Wenn ich das einfach erledigen könnte, würde ich es tun.
Ich habe ja sogar das Grundgerüst aber ich weiß nicht, wie ich die einzelnen Komponenten abfragen soll.
Habe das hier gefunden:
Option Explicit
Sub tt()
Dim VBComp As Object, str As String, n As Long
For Each VBComp In ThisWorkbook.VBProject.VBComponents
str = str & VBComp.Name & " = " & CompTypeToName(VBComp) & Chr(13)
MsgBox VBComp.Name
MsgBox VBComp.CodeModule.CountOfDeclarationLines
MsgBox VBComp.CodeModule.CountOfLines
For n = 1 To VBComp.CodeModule.CountOfLines
MsgBox VBComp.CodeModule.Lines(n, 1)
Next n
Next VBComp
MsgBox str
End Sub
Function CompTypeToName(VBComp As Object) As String
Select Case VBComp.Type
Case 11
CompTypeToName = "Active X Designer"
Case 2
CompTypeToName = "Klassenmodul"
Case 100
CompTypeToName = "Dokumentmodul"
Case 3
CompTypeToName = "MS Form"
Case 1
CompTypeToName = "Standardmodul"
Case Else
CompTypeToName = "unbekannter Typ"
End Select
End Function

aber das ist ja nur der grobe Aufhänger.
Viele Grüße Jens
Anzeige
AW: Schau mal ins Archiv, da gibt's genug! Gruß owT
24.05.2010 20:48:15
jens
Hallo Luc,
ich suche und suche...
Gib mir bitte mal einen Link oder den Suchtext.
Das hier habe ich bzgl. Word gefunden:
Sub Dateisuche()
Dim i As Integer
Dim tmp As Template, myselection As Selection, einDokument As Document
With Application.FileSearch
.NewSearch
.LookIn = "Laufwerk:\...."
.SearchSubFolders = True
.Filename = "*.dot"
.MatchTextExactly = False
.FileType = msoFileTypeAllFiles
End With
Set myselection = Selection
With Application.FileSearch
If .Execute() > 0 Then
On Error GoTo SkipFile
For i = 1 To .FoundFiles.Count
Set einDokument = Application.Documents.Open(.FoundFiles(i))
Set tmp = einDokument.AttachedTemplate
myselection.TypeText .FoundFiles(i)
myselection.TypeParagraph
For j = 1 To tmp.VBProject.VBComponents.Count
myselection.TypeText tmp.VBProject.VBComponents.Item(j).Name
myselection.TypeParagraph
Next j
ActiveDocument.Close
GoTo NachDatei
SkipFile:
myselection.TypeText "Fehler bei " & .FoundFiles(i)
myselection.TypeParagraph
ActiveDocument.Close
Resume NachDatei
NachDatei:
Next i
End If
End With
End Sub
Man kann es aber nicht auf Excel beziehen: Fehler bei tmp As Template...
Viele Grüße Jens
Anzeige
AW: VBA-Module in Dateien listen
26.05.2010 17:03:53
fcs
Hallo Jörg,
ich hab deine Teillösungen/Ansätze mal in eine Prozedur gepackt.
Gruß
Franz

Sub VBA_Module_in_Dateien_suchen()
Dim i As Integer
Dim VBComp As Object, n As Long, Zeile As Long, Spalte As Long
Dim CompTypeToName As String, bolEintragen As Boolean
Dim wks As Worksheet
Dim wbVBA As Workbook
With Application.FileSearch
'Dateisuche definieren, funktioniert nicht unter Excel 2007
.NewSearch
.LookIn = "C:\Lokale Daten\Test"
.SearchSubFolders = True
.FileType = msoFileTypeExcelWorkbooks
If .Execute() > 0 Then
Application.EnableEvents = False
Application.ScreenUpdating = False
Workbooks.Add Template:=xlWBATWorksheet
Set wks = ActiveWorkbook.Worksheets(1)
With wks
'Spaltentitel
Zeile = 1
.Cells(Zeile, 1) = "Dateiname"
.Cells(Zeile, 2) = "Standardmodul"
.Cells(Zeile, 3) = "Klassenmodul"
.Cells(Zeile, 4) = "Userform"
.Cells(Zeile, 5) = "Dokumentmodul"
.Cells(Zeile, 6) = "Active X Designer"
.Cells(Zeile, 7) = "Verzeichnis"
Range("A2").Select
ActiveWindow.FreezePanes = True
End With
n = .FoundFiles.Count
On Error GoTo SkipFile
For i = 1 To .FoundFiles.Count
Application.StatusBar = "Analysiere Datei " & i & " von " & n
'prüfen auf Dateiname mit diesem Makro
If InStr(1, LCase(.FoundFiles(i)), LCase(ThisWorkbook.Name)) > 0 Then GoTo NachDatei
'nächste Zeile in Auswertetabelle
With wks
Zeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
End With
Set wbVBA = Application.Workbooks.Open(.FoundFiles(i), ReadOnly:=True, UpdateLinks:= _
False)
'VBA-Projekt analysieren
For Each VBComp In wbVBA.VBProject.VBComponents
Select Case VBComp.Type
Case 11 '"Active X Designer"
bolEintragen = True: Spalte = 6
Case 2 '"Klassenmodul"
bolEintragen = True: Spalte = 3
Case 100 'Tabelle, Charts, DieseArbeitsmappe
bolEintragen = True: Spalte = 5
Case 3 'Userform
bolEintragen = True: Spalte = 4
Case 1 '"Standardmodul"
bolEintragen = True: Spalte = 2
Case Else '"unbekannter Typ"
bolEintragen = False
End Select
If bolEintragen = True Then
'Modul-Daten eintragen
With wks
If VBComp.Type = 3 Or VBComp.codemodule.countoflines > 2 Then
If .Cells(.Rows.Count, Spalte).End(xlUp).Row = Zeile Then
'nächste Zeile wenn mehrer Module gleichen Typs in VBA-Projekt
Zeile = Zeile + 1
End If
.Cells(Zeile, 1) = wbVBA.Name 'Dateiname
.Hyperlinks.Add Anchor:=wks.Cells(Zeile, 1), _
Address:=wbVBA.FullName, _
ScreenTip:=wbVBA.FullName 'Hyperlink in Spalte 1
.Cells(Zeile, Spalte) = VBComp.Name 'Modulname
.Cells(Zeile, 7) = wbVBA.Path 'Dateiverzeichnis
End If
End With
End If
Next VBComp
wbVBA.Close savechanges:=False
GoTo NachDatei
SkipFile:
wks.Cells(Zeile, 1) = wbVBA.FullName
wks.Cells(Zeile, 2) = "Fehler beim einlesen"
wks.Cells(Zeile, 7) = wbVBA.Path
wbVBA.Close savechanges:=False
Resume NachDatei
NachDatei:
Next i
wks.Columns.AutoFit
Application.EnableEvents = True
Application.ScreenUpdating = True
MsgBox "Fertig"
End If
End With
End Sub

Anzeige
AW: VBA-Module in Dateien listen
26.05.2010 18:47:49
jens
Hallo Franz,
Wahnsinn, das läuft wie verrückt...
Bei einigen bringt er "Fehler beim einlesen" - vielleicht sind die Kennwortgeschützt oder ähnliches.
Ist echt Klasse und wird mir sehr helfen.
Das I-Tüpfelchen wäre natürlich die einzelnen Makros aufzulisten aber das kann man ja später noch mal in Angriff nehmen.
Vielen herzlichen Dank für Deine Hilfe
Gruß Jens
P.S. Du kannst das auf beeendet setzen - ich habe es mal offen gelassen damit Du es leichter findest
AW: VBA-Module / Prozeduren in Dateien listen
27.05.2010 17:15:04
fcs
Hallo Jens,
hier eine Variante, die auch die Prozeduren in den Modulen listet.
Im ersten angezeigten Dialog kannst du den Ordner wählen, in dem die Suche beginnen soll.
Die Ausgabe der Fehlermeldung erfolgt, wenn das VBA-Projekt gegen Lesen geschützt ist.
Gruß
Franz
Textdatei mit Code: https://www.herber.de/bbs/user/69772.txt
Anzeige
AW: VBA-Module / Prozeduren in Dateien listen
27.05.2010 18:23:42
jens
Hallo Franz,
vielen tausend Dank, ich bin wunschlos glücklich!
Ich wünsche Dir noch einen schönen Abend und bedanke mich noch mal ganz herzlich für die Hilfe.
Viele Grüße Jens

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige