Hallo,
gibt es irgendein Tool, das mir im Gegensatz zur normalen Windows-Suche nicht alle *.xls-Dateien (oder doc, ppt, mdb) auflistet, sondern nur diejenigen, die Makros enthalten?
Man könnte ja notfalls auch ein Tool schreiben, allerdings weiss ich nicht, nach welchem Kriterium ich dann im „Code“ der Files suchen soll.
Danke für Hinweise,
Kristian
Hallo Kristian,
hier http://www.wotsit.org/ unter Textfiles/Documents
ist das Dateiformat von xls-Dateien beschrieben. Ich kann damit wenig anfangen, bzw. blick nicht durch wie da wo steht ob makros drin sind, aber vielleicht nützt es dir oder anderen etwas.
Wenn z.b in XL ein Modul1 eingefügt wird mit einer Sub, steht im Quelltest „M.o.d.u.l.1“ (Punkt ist 00hex), aber Code in „dieseArbeitsmappe“ findet man so nicht.
Übrigens, eine leere Tabelle bläht sich durch kleine MsgBox-Sub um ca 1500 Bytes auf.
Scheinbar bleibt nichts übrig als alle Dateien zu öffnen, mit einem Makro wie nachfolgend für Excel die Existens von Code ermitteln.
Code muss noch in eine Schleife über alle *.xls eingebunden werden aber das ist ja kein Problem für dich.
Wenn du ihn bedeutend optimieren=schneller machen kannst oder Code für *.doc *.pps und soweiter entwickelst, poste ihn bitte hier. Danke
Übrigens einlesen, getestet mit Win98 Excel2000, sind die beiden anderen Makros durch den Dos-Aufruf mehrfach schneller als mit excelvba. Musst du ggfs anpassen, diente mal dazu die 10 jüngsten Dateien aus einem Verzeichnis auszulesen, bei 1500 Dateien.
Gruß
Reinhard
Dim vorh As Boolean
Sub tt()
vorh = False
With Workbooks("testmitArbeitsmappe.xls")
anzahl = .VBProject.VBComponents.Count
If anzahl \> 1 + .Sheets.Count Then
vorh = True
GoTo gefunden
End If
Zeilen = 0
For n = 1 To anzahl
Zeilen = Zeilen + .VBProject.VBComponents(n).CodeModule.CountOfLines
Next n
If Zeilen \> 0 Then vorh = True
'If Zeilen \> 1 + 4 \* n Then vorh = True 'bei Option explicit
gefunden:
MsgBox "Datei " & .Name & " hat Makros ist " & vorh
End With
End Sub
Sub test()
Start = Timer
Call früh(10)
MsgBox Timer - Start
End Sub
Sub früh(anz As Integer)
Dim a() As String
Dim datnr As Byte
Dim n As Long
ReDim a(anz)
datnr = FreeFile
Open "c:\temp\fruehe.bat" For Output As #datnr
Print #datnr, "set dircmd=" ' damit in Dircmd kein /p steht
'/a-d = keine Verzeichnisse, nur dateien, /od = fruehste dateien zuerst
' natürlich geht auch c:\temp\*.xl? o.ä.
Print #datnr, "dir c:\temp\*.\* /a-d/od \> c:\temp\fruehe.txt"
Close #datnr
Shell ("c:\temp\fruehe.bat")
While FileLen("c:\temp\fruehe.txt") = 0
Wend
datnr = FreeFile
Open "c:\temp\fruehe.txt" For Input As #datnr
For n = 1 To 5
Input #datnr, a(1)
Next n
For n = 1 To anz
Input #datnr, a(n)
Next n
Close #datnr
'For n = 1 To anz
' MsgBox a(n)
'Next n
End Sub
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
kleine Korrektur
Hallo Kristian,
hier http://www.wotsit.org/ unter Textfiles/Documents
ist das Dateiformat von xls-Dateien beschrieben. Ich kann
Hi Kristian, nicht Textfiles/Documents sondern Spreadsheets/Database
Gruß
Reinhard