Thema Datum  Von Nutzer Rating
Antwort
Rot AutoFilter - nach Wortteil filtern
01.02.2024 11:59:41 Maggy
NotSolved
01.02.2024 14:11:54 Mase
NotSolved

Ansicht des Beitrags:
Von:
Maggy
Datum:
01.02.2024 11:59:41
Views:
456
Rating: Antwort:
  Ja
Thema:
AutoFilter - nach Wortteil filtern

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?

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot AutoFilter - nach Wortteil filtern
01.02.2024 11:59:41 Maggy
NotSolved
01.02.2024 14:11:54 Mase
NotSolved