silencer1981
Goto Top

Dateien mittels Makro in Excel suchen und anzeigen

Ich bin IT-Sicherheitsbeauftragter und möchte die Rechner der User nach verbotenen Dateien durchsuchen. Mein ehemaliger Chef hatte so etwas schon mal vorbereitet...

Hallo alle zusammen.

Ich habe da ein kleines Problem.


Wie schon kurz angesprochen bin ich IT-Sibe und möchte meine Arbeit ein wenig erleichtern.
Ich muss die Rechner der User überprüfen ob Daten vorhanden sind die eigentlich nicht auf einem
Dienstlichen Rechner zu suchen haben. Mein Ehemaliger Chef hat mal ein Excel-Makro geschrieben, wo durch einen
klick mehrere Daten gesucht werden, und aufgelistet. so das man einen Überblich hat wo eventuell Daten sein können die
nicht auf den Rechner gehören. Die Suche wir mit einem Button gestartet. Danach muss man das Ergebnis über einen anderen Button importieren und es werden zusätzliche Schaltflächen geöffnen wo dann die Pfade der Dateien stehen. Zusätzlich werden die Ergebnisse nochmal in 3 Dateien ausgegeben...

Ich habe das Makro ausgeführt ("suchen" Button) und bekomme jedesmal einen Fehler:
Entweder Anwendungs- oder Objektdefinierter Fehler

Beim Debugen markiert er mir immer die Zeile:
.Refresh BackgroundQuery:=False

Keine Ahnung was daran falsch sein soll. Ich muss auch leider zugeben das ich von VBA keine Ahnung habe. Ich habe lediglich
den Code übernommen. Ich hoffe mir kann jemand von euch weiterhelfen.
Hier ist nochmal der gesammte Code:


Sub Schaltfläche6_BeiKlick()


Open "c:\DATEI1.txt" For Output As #1 ' Datei zur Ausgabe öffnen.
Open "c:\DATEI2.txt" For Output As #2
Open "c:\DATEI3.txt" For Output As #3

With Application.FileSearch

Write #2,
Write #2, " Laufwerk C: "
Write #2, " ============"
Write #2,

.FileType = msoFileTypeAllFiles
.LookIn = "C:\"
.Filename = "*.exe"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .exe Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.com"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .com Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.mp3"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .mp3 Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.avi"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .avi Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.mpg"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .mpg Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.jpg"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .jpg Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.bmp"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .bmp Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.gif"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .gif Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.ppt"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .ppt Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.pps"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .pps Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.xls"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .xls Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #3, .FoundFiles(i)
Next i
End If

.Filename = "*.doc"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .doc Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #3, .FoundFiles(i)
Next i
End If

.Filename = "*.mdb"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .mdb Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #3, .FoundFiles(i)
Next i
End If

' Laufwerk D:\
'====================================================================
Write #2,
Write #2, " Laufwerk D: "
Write #2, " ============"
Write #2,
.LookIn = "D:\"
.Filename = "*.exe"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .exe Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.com"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .com Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.mp3"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .mp3 Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.avi"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .avi Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.mpg"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .mpg Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.jpg"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .jpg Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.bmp"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .bmp Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.gif"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .gif Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.ppt"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .ppt Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.pps"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .pps Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #1, .FoundFiles(i)
Next i
End If

.Filename = "*.xls"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .xls Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #3, .FoundFiles(i)
Next i
End If

.Filename = "*.doc"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .doc Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #3, .FoundFiles(i)
Next i
End If

.Filename = "*.mdb"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
Write #2, "Es wurden " & .FoundFiles.Count & _
" .mdb Datei(en) gefunden."
For i = 1 To .FoundFiles.Count
Write #3, .FoundFiles(i)
Next i
End If

Close

End With

End Sub


Sub Schaltfläche12_BeiKlick()

Sheets.Add
ActiveSheet.Select
ActiveSheet.Name = "Ergebnis"
Sheets("Ergebnis").Select
Sheets("Ergebnis").Move After:=Sheets(2)
Sheets.Add
ActiveSheet.Select
ActiveSheet.Move After:=Sheets(3)
ActiveSheet.Select
ActiveSheet.Name = "Spaß"
Sheets.Add
ActiveSheet.Select
ActiveSheet.Move After:=Sheets(4)
ActiveSheet.Select
ActiveSheet.Name = "PersDat"
Sheets("Ergebnis").Select
With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\DATEI2.txt", _
Destination:=Range("A1"))
.Name = "DATEI2"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.Refresh BackgroundQuery:=False
End With
Sheets("Spaß").Select
With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\DATEI1.txt", _
Destination:=Range("A1"))
.Name = "DATEI1"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.Refresh BackgroundQuery:=False
'Columns("A:A").Select
'Selection.Sort Key1:=Columns("A"), Order1:=xlAscending, Header:=xlGuess _
', OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
Sheets("PersDat").Select
With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\DATEI3.txt", _
Destination:=Range("A1"))
.Name = "DATEI3"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.Refresh BackgroundQuery:=False
Columns("A:A").Select
Selection.Sort Key1:=Columns("A"), Order1:=xlAscending, Header:=xlGuess _
, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
Sheets("Ergebnis").Select
End Sub

Sub Schaltfläche13_BeiKlick()
'
' Schaltfläche13_BeiKlick Makro
'

'
Sheets("Ergebnis").Select
ActiveWindow.SelectedSheets.Delete
Sheets("Spaß").Select
ActiveWindow.SelectedSheets.Delete
Sheets("PersDat").Select
ActiveWindow.SelectedSheets.Delete
End Sub

Content-ID: 95254

Url: https://administrator.de/contentid/95254

Ausgedruckt am: 26.11.2024 um 14:11 Uhr

Iwan
Iwan 25.08.2008 um 14:51:49 Uhr
Goto Top
hallo,

als SiBe weisst du ja sicherlich, das du eigentlich ohne die Erlaubnis des Users und/oder des Betriebsrates keine solche Durchsuchung durführen darfst oder habe ich da was verpasst, das es nun doch erlaubt ist und wenn ja, unter welchen Voraussetzungen?

davon mal abgesehen...
mit welcher Excel-Version wurde das Makro erstellt und mit welcher Excel-Version versuchst du es zu starten?
z.B. kommt 2000 nicht mit XP oder 2003er Makros zurecht, so das das Makro umgebastelt werden müsste
Silencer1981
Silencer1981 25.08.2008 um 15:16:47 Uhr
Goto Top
Ja ich weiss das man direkte Durchsuchungen nicht machen darf. Aber ich darf mir die Metadaten anschauen. Was ich nicht darf ist direkt in die Dateien schauen. Dazu müsste ich den ADSB mit hinzunehmen und auch nur bei einem begründetem Verdacht. Oder sehe ich das falsch?
Was ich hier machen möchte ist einfach nur in beisein des Users eine Durchsuchung wo ich sehe ob Spiele oder eventuell Dokumente mit Persönlichen Daten auf der Festplatte gespeichert sind. Was bei uns verboten ist.
Durch das Makro werden mir ja auch nur die Dateinamen aufgelistet. Mehr will und darf ich nicht sehen.

Das Makro wurde mit 2000 geschrieben und jetzt auch verwendet. Das komische ist ja, dass es schon mal funktioniert hat.
Iwan
Iwan 25.08.2008 um 15:25:47 Uhr
Goto Top
unter Excel 2003 läuft es ohne Probleme, auch wenn es erst nach Anpassung in Unterordnern sucht
zu Hause habe ich noch ein 2000er, wo ich es testen könnte
Silencer1981
Silencer1981 25.08.2008 um 15:44:18 Uhr
Goto Top
Was heißt nach Anpassungen in Unterordnern sucht? Was muss denn noch angepasst werden? Wäre ich dir sehr dankbar wenn du es ausprobieren könntest. Das komische ist ja das es vor kurzem schon mal kurz geklappt hat. Aber nur einmal. Kann mir da echt keinen Reim draus machen.
Oder hast du eine andere Idee wie man ansonsten nach Dateien suchen kann ohne sie jedesmal einzelln durch die Dateisuche zu jagen?
Ist jetzt auch nicht so dringend...
Iwan
Iwan 26.08.2008 um 18:37:39 Uhr
Goto Top
sorry, konnte es erst jetzt testen und bei mir funktioniert es einwandfrei unter Excel 2000 SP3
wenn ich das richtig gesehen habe, dann kommt die .Refresh BackgroundQuery:=False nur im Makro "Schaltfläche12_BeiKlick" vor
werden denn die Tabellenblätter überhaupt richtig angelegt?
Silencer1981
Silencer1981 27.08.2008 um 10:07:42 Uhr
Goto Top
Ja der Fehler kommt nur in dieser Zeile. Die Tabellenblätter werden immer richtig angelegt. Aber leider werden sie nicht befüllt. Der Fehler ist anscheinend davor. Wo steht denn eigentlich in diesem Script das die drei Dateien angelegt werden sollen? Ih finde nur die Zeile wo er auf diese Dateien zugreifen möchte...
Iwan
Iwan 27.08.2008 um 10:31:59 Uhr
Goto Top
angelegt werden sie wohl gleich am Anfang im Makro "Schaltfläche6_BeiKlick":
Open "c:\DATEI1.txt" For Output As #1  
Open "c:\DATEI2.txt" For Output As #2  
Open "c:\DATEI3.txt" For Output As #3  
.Refresh BackgroundQuery:=False schlägt bei mir nur dann fehl, wenn die Datei nicht existiert
lass doch mal den ersten Teil des Makros laufen und guck dann mal nach, ob die Dateien überhaupt angelegt werden
eigentlich müssten sie das, denn das erste Makro läuft ja wohl ohne Fehler durch
Silencer1981
Silencer1981 27.08.2008 um 11:23:54 Uhr
Goto Top
Also die Dateien werden angelegt. Das hab ich schon geprüft. Aber irgendwie übernimmt er sie nicht in die Tabelle...
Aber in die Dateien schreibt er was rein.
Iwan
Iwan 27.08.2008 um 13:43:20 Uhr
Goto Top
kopier das Makro mal in eine komplett neue Datei rein und probier es dann noch mal aus
Silencer1981
Silencer1981 27.08.2008 um 15:33:48 Uhr
Goto Top
Das sagst du so einfach. Ich hatte dir schon erählt das ich noch nie ein Makro gemacht habe oder? Ich bekomme es zwar einigermaßen hin einen Code zu lesen, aber nicht einen zu schreiben. Was muss ich denn machen wenn ich den Code rein kopiere? Gehe auf Extras --> Makro --> Visual Basic-Editor
Dann muss ich ja links ein Modul neu erstellen oder? Und dort kopiere ich dann alles rein. Aber ich brauch ja auch noch die Buttons... Wie bekomm ich die am besten da rein und richtig beschrieben? Wenn ich einfach so auf start drücke kommt.
"Index außerhalb des gültigen Bereiches"!
Iwan
Iwan 27.08.2008 um 15:56:07 Uhr
Goto Top
ich habe es so gemacht:
Extras -> Makro -> Visual Basic-Editor
doppelklick auf "Diese Arbeitsmappe" -> einfügen
dann klickst du einfach in das Makro "Schaltfläche6_BeiKlick" und drückst einfach F5
das Makro startet und ist irgendwann fertig
anschliessend gehst du ins Makro "Schaltfläche12_BeiKlick" udn drückst wieder F5
entweder es kommt wieder ein Fehler oder (hoffentlich) nicht
Silencer1981
Silencer1981 27.08.2008 um 16:06:53 Uhr
Goto Top
Er sagt mir dann einen Laufzeitfehler:
"Nicht genügend Speicher" Hab aber nix weiter auf als 3 Web-Fenster... Geht aber auch nicht wenn ich den Rechner neu gestartet habe...
Iwan
Iwan 27.08.2008 um 19:36:13 Uhr
Goto Top
wenn die Fehlermeldung kommt, existieren dann die 3 TXT-Dateien auf C:?
Silencer1981
Silencer1981 28.08.2008 um 07:04:28 Uhr
Goto Top
Ja die existieren dann schon. In einem der Dateien steht auch schon was drin. Aber nur eine Zeile. Und ich kann mir nicht vorstellen das er nur eine Datei gefunden hat. Deswegen wird er wahrscheinlich nach dem erstellen gleich abbrechen. Aber ich wüsste nicht wieso...