Anzeige
Archiv - Navigation
1208to1212
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

XL und Word-Makros auflisten per Makro

XL und Word-Makros auflisten per Makro
Beffen
Guten Morgen, ihr Excellenten. ^^
Ich habe von Rudi bereits eine Idee für einen Code bekommen, wie man aus einem vorgewählten Pfad alle Exceldateien listen kann und herausfinden kann, welche Makros enthalten, und wie sie heissen.
Das klappt schon grundsätzlich recht gut und vielen Dank Rudi!!!
Option Explicit
Sub GetMakroList()
Dim FSO As Object, oFolder As Object
Dim strFolder As String
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Ordner wählen"
.AllowMultiSelect = False
If .Show = -1 Then
strFolder = .SelectedItems(1)
End If
End With
If strFolder = "" Then Exit Sub
Set FSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = FSO.GetFolder(strFolder)
ThisWorkbook.Sheets(1).Cells.Clear
prcFiles oFolder
prcSubFolders oFolder
End Sub

Private Sub prcFiles(oFolder)
Dim oFile As Object, wkb As Workbook
For Each oFile In oFolder.Files
If LCase(oFile) Like "*.xls" Then
Set wkb = Workbooks.Open(oFile)
MakroListe wkb
wkb.Close False
End If
Next
End Sub


Private Sub prcSubFolders(oFolder)
Dim oSubFolder As Object
For Each oSubFolder In oFolder.SubFolders
prcFiles oSubFolder
prcSubFolders oSubFolder
Next
End Sub


Private Sub MakroListe(wkb As Workbook)
Dim vbc As Object, iCounter As Long, wks As Worksheet, sLine As String
Dim blnMakro As Boolean
Set wks = ThisWorkbook.Sheets(1)
On Error GoTo errhandler
For Each vbc In wkb.VBProject.VBComponents
With vbc.CodeModule
For iCounter = 1 To .CountOfLines
sLine = Trim(.Lines(iCounter, 1))
If sLine Like "Sub*(*)*" _
Or sLine Like "Public Sub*(*)*" _
Or sLine Like "Private Sub*(*)*" _
Or sLine Like "Function*(*)*" _
Or sLine Like "Public Function*(*)*" _
Or sLine Like "Private Function*(*)*" Then
blnMakro = True
With wks.Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0) = wkb.FullName
.Offset(1, 1) = sLine
End With
End If
Next iCounter
End With
Next vbc
If Not blnMakro Then
With wks.Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0) = wkb.FullName
.Offset(1, 1) = "No Makro"
End With
End If
errhandler:
If Err.Number > 0 Then
MsgBox Err.Description, , "Fehler"
End If
End Sub

Allerdings nicht bei allen Servern unseres Systemes. :-( Ich habe schon versucht eine Fehlerbehandlung einzubauen, leider ohne Erfolg. Des Häufigeren kommt der Fehler: "Index ausserhalb des gültigen Bereichs". Ein weiteres Problem ist, dass nicht nur XL-Dateien Makros enthalten, sondern auch Doc und Access-Dateien. Wiederum habe ich selbst probiert und es wurden der Variable wkb auch tatsächlich gefundene Dokumente aus Word zugeteilt, jedoch kann ich mit "Workbooks.open..." ja kein Dokument öffnen. documents.open brachte auch keinen Erfolg und auch weitergehende Änderungen nicht....
Hat jemand noch ne Idee, wie ich alle Office Dokumente (in jedem Fall aber xl und Word) nach Makros durchsuchen kann?Mit XL klappts ja schon sehr gut....
Danke an Alle, die sich die Zeit nehmen!
Gruß Beffen
AW: XL und Word-Makros auflisten per Makro
15.04.2011 09:23:10
Rudi
Hallo,
vielleicht klappt das so:
Private Sub prcFiles(oFolder)
Dim oFile As Object, wkb As Workbook, appWd As Object
For Each oFile In oFolder.Files
Select Case LCase(Right(oFile, 4))
Case ".xls"
Set wkb = Workbooks.Open(oFile)
Case ".doc"
Set appWd = CreateObject("Word.Application")
Set wkb = appWd.documents.Open(oFile)
End Select
If Not wkb Is Nothing Then
MakroListe wkb
wkb.Close False
Set wkb = Nothing
Set appWd = Nothing
End If
Next
End Sub

Weiß ich aber nicht, da ich mich mit WordBasic noch nicht beschäftigt habe.
Makroliste habe ich noch optimiert:
Sub MakroListe(wkb As Workbook)
Dim vbc As Object, wks As Worksheet
Dim iRow As Integer, iCounter As Integer
Dim sName As String
Set wks = ThisWorkbook.Sheets(1)
iCounter = wks.Cells(wks.Rows.Count, 3).End(xlUp).Row + 1
For Each vbc In wkb.VBProject.VBComponents
iRow = 1
With vbc.CodeModule
Do While iRow  "" And .ProcOfLine(iRow, 0)  sName Then
sName = .ProcOfLine(iRow, 0)
wks.Cells(iCounter, 1) = wkb.FullName
wks.Cells(iCounter, 2) = vbc.Name
wks.Cells(iCounter, 3) = sName
iCounter = iCounter + 1
iRow = .ProcStartLine(sName, 0) + .ProcCountLines(sName, 0) - 1
End If
iRow = iRow + 1
Loop
End With
iRow = 0
Next vbc
End Sub
Gruß
Rudi
Anzeige
AW: XL und Word-Makros auflisten per Makro
15.04.2011 11:23:54
Beffen
Guten Morgen rudi,
danke für deine Antwort.
Er markiert (wie bei meinem Versuch auch schon): Set wkb = appWd.documents.Open(oFile)
mit dem Fehler "Typen unverträglich"
hatte appwd as Object definiert und auch "appWd.documents.Open(oFile)" geschrieben.
Warum ich Dir das erzähle? Freu mich gerade in VBA eins und eins richtig zusammengezählt zu haben! ^^
Trotzdem besteht die Frage ja weiterhin....Wie kann ich Word und Access zu der Abfrage hinzufügen?!?
Gruß Beffen
AW: XL und Word-Makros auflisten per Makro
15.04.2011 12:28:08
Rudi
Hallo,
hab ich übersehen. Versuch mal
Private Sub prcFiles(oFolder)
Dim oFile As Object, wkb As Object, appWd As Object
Gruß
Rudi
Anzeige
AW: XL und Word-Makros auflisten per Makro
15.04.2011 12:32:43
Beffen
Mahlzeit rudi.
mein Code lautet nun folgendermaßen:
Option Explicit
Sub GetMakroList()
Dim FSO As Object, oFolder As Object
Dim strFolder As String
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Ordner wählen"
.AllowMultiSelect = False
If .Show = -1 Then
strFolder = .SelectedItems(1)
End If
End With
If strFolder = "" Then Exit Sub
Set FSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = FSO.GetFolder(strFolder)
ThisWorkbook.Sheets(1).Cells.Clear
prcFiles oFolder
prcSubFolders oFolder
End Sub

Private Sub prcFiles(oFolder)
Dim oFile As Object, wkb As Object, appWd As Object
For Each oFile In oFolder.Files
Select Case LCase(Right(oFile, 4))
Case ".xls"
Set wkb = Workbooks.Open(oFile)
Case ".doc"
Set appWd = CreateObject("Word.Application")
Set wkb = appWd.documents.Open(oFile)
End Select
If Not wkb Is Nothing Then
MakroListe wkb
wkb.Close False
Set wkb = Nothing
Set appWd = Nothing
End If
Next
End Sub


Private Sub prcSubFolders(oFolder)
Dim oSubFolder As Object
For Each oSubFolder In oFolder.SubFolders
prcFiles oSubFolder
prcSubFolders oSubFolder
Next
End Sub

Sub MakroListe(wkb As Workbook)
Dim vbc As Object, wks As Worksheet
Dim iRow As Integer, iCounter As Integer
Dim sName As String
Set wks = ThisWorkbook.Sheets(1)
iCounter = wks.Cells(wks.Rows.Count, 3).End(xlUp).Row + 1
For Each vbc In wkb.VBProject.VBComponents
iRow = 1
With vbc.CodeModule
Do While iRow If .ProcOfLine(iRow, 0) "" And .ProcOfLine(iRow, 0) sName Then
sName = .ProcOfLine(iRow, 0)
wks.Cells(iCounter, 1) = wkb.FullName
wks.Cells(iCounter, 2) = vbc.Name
wks.Cells(iCounter, 3) = sName
iCounter = iCounter + 1
iRow = .ProcStartLine(sName, 0) + .ProcCountLines(sName, 0) - 1
End If
iRow = iRow + 1
Loop
End With
iRow = 0
Next vbc
End Sub
Er provoziert leider noch immer einen Fehler:
Laufzeitfehler: 13 - Typen unverträglich. Markiert wird:
Set wkb = appWd.documents.Open(oFile)
Dort hing ich dann leider auch....
Gruß Beffen
Anzeige
da weiß ich auch nicht weiter owT
15.04.2011 12:51:56
Rudi
Word Makro auslesen....
15.04.2011 13:08:53
Beffen
sehr cool, dass ich den Code soweit verstehe, aber natürlich schade, dass selbst DU dich damit nicht weiter auskennst...... :-)
Jemand anderer noch einen Vorschlag?
Freu mich über jeden neuen Gedanken....
AW: XL und Word-Makros auflisten per Makro
17.04.2011 14:51:00
Anton
Hallo Beffen,
ungetestet:
ersetze Sub MakroListe(wkb As Workbook)
durch Sub MakroListe(wkb As Object)
mfg Anton
AW: XL und Word-Makros auflisten per Makro
17.04.2011 15:27:43
Beffen
Hallo Anton,
vielen Dank für deine Hilfe.
Ich hab's korrigiert, aber leider funktioniert der Code immernoch nur dann, wenn KEINE Worddokumente geöffnet werden. Also Exceltabellen werden problemlos bearbeitet, an Worddateien kommt er nicht vorbei.... Speziell die Zeiel zum Öffnen wird markiert:
Set wkb = appWd.documents.Open(oFile)
und mit folgendem Fehler kommentiert:
Laufzeitfehler 13: Typen unverträglich.
Ich hab das gefühl, dass es schlicht an dem Befehl liegt ein Worddokument zu öffen. Nur leider find ich bei allen Recherchen keine Variante, die funktioniert.....
Gruß und schön Sonntag und nochmal danke für deine Mühe!
Beffen
Anzeige
AW: XL und Word-Makros auflisten per Makro
17.04.2011 17:19:03
Anton
Hallo Beffen,
ersetze noch Set wkb = appWd.documents.Open(oFile)
durch Set wkb = appWd.documents.Open(oFile.Path)
mfg Anton
AW: XL und Word-Makros auflisten per Makro
17.04.2011 18:54:23
Beffen
Hallo nochmal Anton,
ich glaube das hat Excel erstmal gefressen. Allerdings ist er jetzt der Meinung, dem "programmatischem Zugriff auf das Visual Basic-Projekt [...]" nicht vertrauen zu brauchen. Haken unter Excel-Optionen (Vertrauenscentereinstellungen usw) sind alle gesetzt. Hab sogar explizit den Speicherort freigegeben...
Jetzt wird folgende Zeile bemängelt:
For Each vbc In wkb.VBProject.VBComponents
Hmpf - die Probleme hören nicht auf.... hach....
Anton, ich danke Dir bis hierhin!
Anzeige
AW: XL und Word-Makros auflisten per Makro
17.04.2011 18:59:47
Anton
Hallo Beffen,
Haken unter Excel-Optionen (Vertrauenscentereinstellungen usw) sind alle gesetzt.

Du musst diese Einstellung auch in Word vornehmen.
mfg Anton
AW: XL und Word-Makros auflisten per Makro
17.04.2011 19:08:03
Beffen
Hallo nochmal Anton,
ich habe die EInstellung in Word ebenfalls vorgenommen. Nachdem er nun ein paar Minuten gerechnet hat, kommt die Meldung: "MS Excel wartet auf die Beendigung einer OLE-Aktion in einer anderen Anwendung". Aber nirgends ist eine Anwendung am Warten.... Hmmmmpfff..... funktioniert der Code bei Dir?
Gruß Beffen
Wow........cool - weitere kleine frage....
17.04.2011 19:17:03
Beffen
Hallo Nochmal Anton,
ich habe schlussendlich doch noch eine Fehlermeldung hgefunden (Kopie des Dokuments ist geöffnet - blablabla). Es scheint alles erstmal zu funktionieren! Super - ich danke Dir!
Hast Du vielleicht auch noch ne Idee, wie ich Access-dokumente öffne und nach Makros durchsuche?
Gruß Beffen
Anzeige
Makros auflisten
18.04.2011 10:57:01
Anton
Hallo Beffen,
probier's hiermit
Code:

Option Explicit
Sub GetMakroList()  
  Dim FSO As Object, oFolder As Object  
  Dim strFolder As String  
  Application.ScreenUpdating = False
  With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Ordner wählen"
    .AllowMultiSelect = False  
    If .Show = -1 Then  
      strFolder = .SelectedItems(1)
    End If  
  End With  
  If strFolder = "" Then Exit Sub    
  Set FSO = CreateObject("Scripting.FileSystemObject")  
  Set oFolder = FSO.GetFolder(strFolder)  
  ThisWorkbook.Sheets(1).Cells.Clear
  prcFiles oFolder
  prcSubFolders oFolder
End Sub  
Private Sub prcFiles(oFolder)  
  Dim oFile As Object, wkb As Object, appWd As Object  
  For Each oFile In oFolder.Files  
    Select Case LCase(Right(oFile, 4))  
      Case ".xls"
        Set wkb = Workbooks.Open(oFile)  
      Case ".doc"
        Set appWd = CreateObject("Word.Application")  
        Set wkb = appWd.documents.Open(oFile.Path)  
      Case ".mdb"
        MakroListeMdb oFile.Path
    End Select  
    If Not wkb Is Nothing Then    
      MakroListe wkb
      wkb.Close False  
      Set wkb = Nothing  
      Set appWd = Nothing  
    End If  
  Next
End Sub  
Private Sub prcSubFolders(oFolder)  
  Dim oSubFolder As Object    
  For Each oSubFolder In oFolder.SubFolders    
    prcFiles oSubFolder
    prcSubFolders oSubFolder
  Next
End Sub  
Sub MakroListe(wkb As Object)  
  Dim vbc As Object, wks As Worksheet  
  Dim iRow As Integer, iCounter As Integer    
  Dim sName As String  
  Set wks = ThisWorkbook.Sheets(1)
  iCounter = wks.Cells(wks.Rows.Count, 3).End(xlUp).Row + 1
  For Each vbc In wkb.VBProject.VBComponents  
    iRow = 1
    With vbc.CodeModule  
      Do While iRow < .CountOfLines + 1  
        If .ProcOfLine(iRow, 0) <> "" And .ProcOfLine(iRow, 0) <> sName Then  
          sName = .ProcOfLine(iRow, 0)
          wks.Cells(iCounter, 1) = wkb.FullName
          wks.Cells(iCounter, 2) = vbc.Name
          wks.Cells(iCounter, 3) = sName
          iCounter = iCounter + 1
          iRow = .ProcStartLine(sName, 0) + .ProcCountLines(sName, 0) - 1
        End If  
        iRow = iRow + 1
      Loop
    End With  
    iRow = 0
  Next vbc
End Sub  
Sub MakroListeMdb(pfad As String)  
  Dim appAC As Object, wks As Worksheet  
  Dim iRow As Integer, iCounter As Integer    
  Dim i As Integer, j As Integer    
  Dim sName As String  
  Set wks = ThisWorkbook.Sheets(1)
  iCounter = wks.Cells(wks.Rows.Count, 3).End(xlUp).Row + 1
  Set appAC = CreateObject("Access.Application")  
  appAC.OpenCurrentDatabase pfad
  For i = 0 To appAC.Modules.Count - 1  
    For j = 1 To appAC.Modules(i).CountOfLines  
      sName = appAC.Modules(i).ProcOfLine(j, 0)
      If sName <> appAC.Modules(i).ProcOfLine(j + 1, 0) Then  
        wks.Cells(iCounter, 1) = pfad
        wks.Cells(iCounter, 2) = appAC.Modules(i).Name
        wks.Cells(iCounter, 3) = appAC.Modules(i).ProcOfLine(j + 1, 0)
        iCounter = iCounter + 1
      End If  
    Next
  Next
  appAC.CloseCurrentDatabase
  Set appAC = Nothing  
End Sub  


mfg Anton
Anzeige
AW: Makros auflisten
18.04.2011 11:11:38
Beffen
Hallo Anton - ich bin Dir sehr dankbar für deine Hilfe.
Ich habe hier momentan leider keine Accessdaten zur Hand.
Morgen würde ich das Script mal durchlaufen lassen und mich dann wieder melden....
Ich danke dir 1000mal.....
Gruß Beffen
AW: Makros auflisten
18.04.2011 11:30:47
Beffen
Hallo Anton. Läuft soweit - ich habs auf nem anderen System probiert.
Allerdings habe ich - da ich nicht überall Zugriff habe - zwei Zeilen hinzugefügt:
Option Explicit
Sub GetMakroList()
Dim FSO As Object, oFolder As Object
Dim strFolder As String
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Ordner wählen"
.AllowMultiSelect = False
If .Show = -1 Then
strFolder = .SelectedItems(1)
End If
End With
If strFolder = "" Then Exit Sub
Set FSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = FSO.GetFolder(strFolder)
ThisWorkbook.Sheets(1).Cells.Clear
prcFiles oFolder
prcSubFolders oFolder
End Sub
Private Sub prcFiles(oFolder)
Dim oFile As Object, wkb As Object, appWd As Object
  On Error Resume Next
For Each oFile In oFolder.Files
Select Case LCase(Right(oFile, 4))
Case ".xls^m"
Set wkb = Workbooks.Open(oFile)
Case ".doc"
Set appWd = CreateObject("Word.Application")
Set wkb = appWd.documents.Open(oFile.Path)
Case ".mdb"
MakroListeMdb oFile.Path
End Select
If Not wkb Is Nothing Then
MakroListe wkb
wkb.Close False
Set wkb = Nothing
Set appWd = Nothing
End If
Next
End Sub

Private Sub prcSubFolders(oFolder)
Dim oSubFolder As Object
  On Error Resume Next
For Each oSubFolder In oFolder.SubFolders
prcFiles oSubFolder
prcSubFolders oSubFolder
Next
End Sub
Sub MakroListe(wkb As Object)
Dim vbc As Object, wks As Worksheet
Dim iRow As Integer, iCounter As Integer
Dim sName As String
Set wks = ThisWorkbook.Sheets(1)
iCounter = wks.Cells(wks.Rows.Count, 3).End(xlUp).Row + 1
For Each vbc In wkb.VBProject.VBComponents
iRow = 1
With vbc.CodeModule
Do While iRow If .ProcOfLine(iRow, 0) "" And .ProcOfLine(iRow, 0) sName Then
sName = .ProcOfLine(iRow, 0)
wks.Cells(iCounter, 1) = wkb.FullName
wks.Cells(iCounter, 2) = vbc.Name
wks.Cells(iCounter, 3) = sName
iCounter = iCounter + 1
iRow = .ProcStartLine(sName, 0) + .ProcCountLines(sName, 0) - 1
End If
iRow = iRow + 1
Loop
End With
iRow = 0
Next vbc
End Sub Sub MakroListeMdb(pfad As String)
Dim appAC As Object, wks As Worksheet
Dim iRow As Integer, iCounter As Integer
Dim i As Integer, j As Integer
Dim sName As String
Set wks = ThisWorkbook.Sheets(1)
iCounter = wks.Cells(wks.Rows.Count, 3).End(xlUp).Row + 1
Set appAC = CreateObject("Access.Application")
appAC.OpenCurrentDatabase pfad
For i = 0 To appAC.Modules.Count - 1
For j = 1 To appAC.Modules(i).CountOfLines
sName = appAC.Modules(i).ProcOfLine(j, 0)
If sName appAC.Modules(i).ProcOfLine(j + 1, 0) Then
wks.Cells(iCounter, 1) = pfad
wks.Cells(iCounter, 2) = appAC.Modules(i).Name
wks.Cells(iCounter, 3) = appAC.Modules(i).ProcOfLine(j + 1, 0)
iCounter = iCounter + 1
End If
Next
Next
appAC.CloseCurrentDatabase
Set appAC = Nothing
End Sub
Jetzt stoppt er den Code nicht mher mit "Zugriff verweigert".
Allerdings hast du den Code ja dahingehend geändert, dass nur noch Dateien mit Makro angezeigt werden. Leider stimmt die Anzeige aber nicht!
Ich habe zu Testzwecken eine Datei in der definitiv ein Makro drin ist, durchsuchen lassen und es erfolgte keine Anzeige. Der Code war in "tabelle1" drin. Ich hab ihn dann in ein Modul verschoben, was leider auch nicht brachte!
Ist es möglich wieder alle Dateien anzeigen zu lassen? Die Filterung würd ich dann selbst vornehmen.
MfG Beffen
Anzeige
AW: Makros auflisten
18.04.2011 11:52:40
Anton
Hallo Beffen,
hast du den Code ja dahingehend geändert, dass nur noch Dateien mit Makro angezeigt werden.

Habe ich nicht , sondern du und zwar , in der Zeile
Case ".xls^m"
fragst du ab , ob LCase(Right(oFile, 4)) = ".xls^m" ist , was nie der Fall ist.
Deswegen werden deine Exceldateien nie aufgelistet.
mfg Anton
AW: Makros auflisten
18.04.2011 12:36:24
Beffen
Hallo Anton,
den Tippfehler habe ich bereits vorab bemerkt und korrigiert. Aber in der Zwischenablage war er noch mit drin. Sorry.
Jetzt listet er ausschliesslich die Dateien, die Makros beinhalten. Ich möchte gerne aber alle Dateien gelistet haben um anhand einiger Testdateien überprüfen zu können, ob das Makro korrekt arbeitet.
XLSM-Dateien werden leider auch nicht gelistet (ich weiss auch nicht, ob der Syntax so korrekt ist.... s.u.)
Select Case LCase(Right(oFile, 4))
Case ".xls"
Set wkb = Workbooks.Open(oFile)
Case ".xlsm"
Set wkb = Workbooks.Open(oFile)

Case ".doc"
Set appWd = CreateObject("Word.Application")
Set wkb = appWd.documents.Open(oFile.Path)
Case ".mdb"
MakroListeMdb oFile.Path
End Select
So siehts jetzt aus.
Kann ich den office2007-Makro-Syntax so abfragen?
Anzeige
AW: Makros auflisten
18.04.2011 15:51:30
fcs
Hallo Beffen,
das Makro vergleicht die letzten 4 Zeichen des Dateinamens/Namenserweiterung.
So sollte es funktionieren. Allerdings funktioniert das Makro dann nur unter Office 2007, 2010 korrekt, da ältere Excel-/Word-/Accesversionen, die neueren Dateiformate nur mit Zusatztools öffnen können.
Select Case LCase(Right(oFile, 4))
Case ".xls", ".xlt"
Set wkb = Workbooks.Open(oFile)
Case "xlsm", "xlsx", "xltx", "xltm", "xlsb"
Set wkb = Workbooks.Open(oFile)
Case ".doc", "docx"
Set appWd = CreateObject("Word.Application")
Set wkb = appWd.documents.Open(oFile.Path)
Case ".mdb"
MakroListeMdb oFile.Path
End Select

Gruß
Franz
AW: Makros auflisten
18.04.2011 16:09:57
Beffen
Hallo Franz, Hallo Anton
super. Klasse. Klappt soweit!!
Noch eine Frage: Es kommt bei Word die Rückfrage, dass ICH die Datei geöffnet habe und ob ich eine Schreibgeschützte Kopie öffnen möchte oder benachrichtigt werden will usw. Wenn ichs wegklicke läuft das Programm weiter - sonst hält es an. Nach ungefähr einer Minuten Wartezeit meldet sich dann auch Excel mit dem Hinweis, dass auf eine OLE-Anwendung gewartet wird.
Und auch bei Excel kommt bei einigen Dateien die Meldung, dass Verknüpfungen enthalten sind und ob sie aktualisiert werden sollen... Auch dann wird der Code immer angehalten...
Ziel ist, dass der Code (die Nacht) über alle Dateien zusammensammelt und am morgen fertig ist. er darf sozusagen nicht auf Eingaben durch Benutzer warten, sondern eventuell nach ner Gewissen Wartezeit selbst "entscheiden"
Und alle Dateien, wo er keine Makros findet sollen auch mit aufgeführt werden, das wäre wichtig. Der Kontrolle wegen....
Tausende Dank euch Beiden!!!!
Beffen
AW: Makros auflisten
18.04.2011 21:01:47
fcs
Hallo Beffen,
ich hab die Prozeduren mal so angepasst, dass es einigermassen ordentlich durchlaufen sollte.
Allerdings ist bei mir öfters mal die Wordanwendung nach Übername der VBA-Modulinformationen ausgestiegen. Allerdings war kein systematischer Grund erkennbar. Access konnte ich nicht testen, da bei mir privat nicht vorhanden.
Probleme werden auf jeden Fall Dateien bereiten, die mit Kennwort geschützt sind. Da ist zwingend manuelle Eingabe des Kennworts erforderlich.
Wichtigste Anpassungen:
1. In Excel werden Alarmmeldungen während der Makroausführung deaktiviert
2. In Excel werden Ereignismakros während der Makroausführung deaktiviert
3. In Excel wird die Bildschirmaktualisierung während der Makroausführung deaktiviert
4. Die Exceldateien werden schreibgeschützt geöffnet ohne Links zu aktualisieren
5. Worddateien werden schreibgeschützt geöffnet.
6. Die vom Makro kreierten Anwendungsobjekte (Word und Access) werden nach dem schliessen der jeweils geöffneten Datei wieder beendet. Sonst wird der Arbeitsspeicher mit unsichtbaren Word/Access-Anwendungen zugemüllt.
7. Die kreierten Anwendungsobjekte werden sichtbar angezeigt. So sind ggf. manuelle Eingaben möglich.
8. Für jede geöffnete Datei wird mindestens eine Zeile in der Liste eingetragen.
Den Traum diese Anwendung ohne Störungen über Nacht durchlaufen lassen zu können muss du dir wahrscheinlich abschminken.
Textdatei mit Code: https://www.herber.de/bbs/user/74449.txt
Gruß
Franz
Worddokumente werden nicht gelistet
19.04.2011 09:20:49
Beffen
Hallo und Guten Morgen Franz und Anton und natürlich auch der Rest,
ich bin ja ziemlich baff, dass das so gut läuft. Hätt ich nicht gedacht.
Einen Haken hab ich allerdings noch gefunden:
*doc-Dateien werden zwar aufgerufen, tauchen aber nicht in der Liste auf. Auch, wenn sie kein Makro enthalten. Exceldateien werden ja (so wie es sein soll) immer gelistet.
Ich versteh aber nicht warum, denn wkb wird ja im Falle des Word-Datei-Fundes die Word.Application zugewiesen und anschliessend, wie eine Excel-Datei verarbeitet. Demzufolge müsste sie also auch genauso gelistet werden.....
Oder irre ich mich da?
Kann man das noch ergänzen?
Gruß Beffen
ERLEDIGT!!
19.04.2011 09:31:11
Beffen
Hallo nochmal!!!
Hat sich erledigt, dem Zugriff auf das VBA-Projekt muss natürlich vertraut werden....
Suuuuuuuper!!!!
Ihr seid wirklich Experten....Irgendwann mal hab ich dann eventuell auch genug gefragt.... ^^^
Danke nochmal! Und schöne Ostern!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige