Hallo zusammen,
(Win 10 / Office Professional Plus 2016)
ich bin Anfängerin in Sachen VBA Programmierung, habe aber bereits ein paar Dinge hinbekommen.
Ich habe einen Ordner mit etlichen pdf Dokumenten von 4 verschiedenen Schulungsbereichen. Im Maximum wären es also ca 200 Abgaben je 4 Dokumenten = ca 800 pdf Dateien.
Jede Pdf wird in folgender Form benannt: Vorname_Nachname_Schulungsbezeichnung_ID.pdf (die Schulungsbezeichnung wird je nach Länge des Vor- und Nachnamens unterschiedlich abgekürzt)
Nun habe ich die Idee gehabt, die gesamten Dokumentennamen in Excel zu importieren, diese dann in 4 verschiedene Tabellenblätter aufzuteilen je nach Schulungsbezeichnung und anschließend abzugleichen, wer sein Zertifikat abgegeben hat und wer noch nicht.
Darf ich als erstes fragen, wie Ihr das hier seht. Ist die Aufgabe "wie geschaffen für VBA" oder würdet Ihr sagen "Oh no, völlig falscher Weg"?
Nun meine VBA Probleme:
Import meiner Dokumentnamen sollte soweit klappen. Diesen Dokumentnamen der mit "_" getrennt ist teile ich in verschiedene Spalten auf (klappt auch mit wenig Zeilen)
- Mein erstes Problem, ich setze einen AutoFilter um in die einzelnen Tabellenblätter aufzuteilen. Allerdings ist es in der Spalte mit der Schulungsbezeichnung ein wenig schwer den richtigen Filter zu setzen, da die Worte unterschiedlich abgekürzt werden. Wie kann ich nach nur Bruchstücken des Wortes filtern, oder funktionieren Filter ausschließlich mit dem gesamten Wort? Welche Möglichkeit hätte ich ansonsten in Spalte I nach Wortausschnitten zu filtern und diese gefilterten Daten in ein anderes Tabellenblatt zu kopieren?
Hier der bisherige Quellcode:
Sub Dateien_eines_Ordners_Auflisten()
'alle Zeilen einblenden
Cells.EntireRow.Hidden = False
Dim IngZeile As Long
Dim objFileSystem As Object
Dim objVerzeichnis As Object
Dim objDateienliste As Object
Dim objDatei As Object
Set objFileSystem = CreateObject("scripting.FileSystemObject")
Set objVerzeichnis = objFileSystem.GetFolder("C:\Users\admin_neu\Downloads\2023\2023")
Set objDateienliste = objVerzeichnis.Files
IngZeile = 1
For Each objDatei In objDateienliste
If Not objDatei Is Nothing Then
ActiveSheet.Cells(IngZeile, 1) = objDatei.Name
IngZeile = IngZeile + 1
End If
Next objDatei
'Zeile als Überschriftszeile eifügen, damit der Filter in dieser oberen Zeile angreift
Rows(1).Insert
'Spalte A trennen (Trennzeichen _)
Range("G1:J200").ClearContents
Dim varAktRange As Range
Set varAktRange = ActiveSheet.Range("A1").CurrentRegion
Dim i As Long
Dim varArray As Variant
For i = 2 To varAktRange.Rows.Count
varArray = Split(varAktRange.Cells(i, 1).Value, "_")
varAktRange.Cells(i, 7).Value = varArray(0)
varAktRange.Cells(i, 8).Value = varArray(1)
varAktRange.Cells(i, 9).Value = varArray(2)
varAktRange.Cells(i, 10).Value = varArray(3)
Next i
'Autofilter in einzelne Sheets aufteilen
Sheets("Tabelle1").Select
Range("G1:I200").Select
Selection.AutoFilter
ActiveSheet.Range("$G$1:$I$200").AutoFilter Field:=3, Criteria1:="Erste"
Range("G1:I200").Select
Selection.Copy
Sheets("Erste").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("Tabelle1").Select
Range("G1:I200").Select
Selection.AutoFilter
ActiveSheet.Range("$G$1:$J$200").AutoFilter Field:=3, Criteria1:="Arbeits-"
Range("G1:I200").Select
Selection.Copy
Sheets("Arbeitsschutz").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("Tabelle1").Select
Range("G1:I200").Select
Selection.AutoFilter
ActiveSheet.Range("$G$1:$J$200").AutoFilter Field:=3, Criteria1:="Brandschutzunterweis"
Range("G1:I200").Select
Selection.Copy
Sheets("Brandschutz").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("Tabelle1").Select
Range("G1:I200").Select
Selection.AutoFilter
ActiveSheet.Range("$G$1:$J$200").AutoFilter Field:=3, Criteria1:="Bildschirmarbeitspla"
Range("G1:I200").Select
Selection.Copy
Sheets("Bildschirmarbeitsplatz").Select
Range("A1").Select
ActiveSheet.Paste
'Autofilter von Tabelle1 zurücksetzen
For Each ws In ActiveWorkbook.Worksheets
If ws.FilterMode = True Then
ws.ShowAllData
End If
Next ws
MsgBox "Daten wurden erfolgreich kopiert"
End Sub
- Anschließend möchte ich eine aktuelle Personenliste_gesamt mit den Ergebnissen der abgegebenen gefilterten Dokumenten abgleichen. Sollte ich in dem Fall die Personenliste gesamt in das aktuelle Dokument integrieren oder in einem seperaten Dokument verwalten. Ginge dies überhaupt, Daten zu vergleichen/markieren von 2 verschiedenen Dokumenten?
|