Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1872to1876
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

Mit VBA aus einer Liste suchen

Mit VBA aus einer Liste suchen
23.02.2022 22:30:20
El.
Liebes Forum,
habe mich nach längerer Suche im Netz dazu entschlossen, mir Hilfe und Unterstützung im "Herber Forum" zu holen.
Es geht bei mir um eine Suchliste mit ca. 10 sich wechselnden Filmnamen, die ich für die Archivierung aus einem Worksheet mit ca. 80 Tabellenblättern heraus suchen will. In den Tabellen stehen die Namen der bereits aufgezeichneten aber noch nicht bearbeiteten Videos. (Die Videos können auch schon mehrfach auf den Festplatten vorhanden sein). Jeder Tabelle ist eine Festplatte zugeordnet. (Das ist ja nicht so wichtig, der Ordnung halber, erwähne ich es halt). Wenn ich jetzt mehrere Videos bearbeite, schreibe ich vorher die Filmnamen in eine Liste, in eine Tabelle und suche vorher in der betreffenden "Arbeitsmappe" mit "Suchen und Ersetzen" jeden einzelnen Film ob und wie oft er schon vorhanden ist. Da das ja sehr umständlich ist, würde ich das ganze gerne mit einer VBA Lösung vereinfachen. Aber leider reichen da meine VBA Kenntnisse dafür nicht aus und deshalb wende ich mich an das Forum, ob man mir da wieder behilflich sein kann. Schön wäre es natürlich, wenn die gefundenen Filme in der Tabelle abgespeichert werden würden. wo auch die Liste mit den gesuchten Filmnamen stehen. (FilmName sowieso ist in Tabelle sowieso vorhanden).
Vielen Dank im voraus
und viele Grüße
Elfriede

29
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mit VBA aus einer Liste suchen
24.02.2022 08:32:21
UweD
Hallo
&gt&gt habe mich nach längerer Suche im Netz dazu entschlossen, mir Hilfe und Unterstützung im "Herber Forum" zu holen.
Das war schon mal eine Gute Wahl
Stelle mal eine abgespeckte Datei zu Verfügung.
Wenige Blätter mit wenig Daten, aber so, dass wir das nachvollziehen können.
LG UweD
AW: Mit VBA aus einer Liste suchen
24.02.2022 11:01:48
El.
Hallo UweD,
habe jetzt eine Datei hochgeladen. Ist natürlich nur ein Bruchteil der Festplatten vorhanden, weil ja der "Upload" auf 300 KB begrenzt ist. Auch die Anzahl der eingegebenen Filme ist dadurch natürlich erheblich kleiner pro Festplatte. Aber das dürfte ja keine Rolle spielen. Die Tabelle "Suchordner" befindet sich normalerweise in einer anderen Arbeitsmappe. Sollte es deswegen Probleme geben, kann man die Suche auch von dieser "Tabelle" aus starten.
  • https://www.herber.de/bbs/user/151341.xlsm

  • Viele Grüße
    Elfriede
    Anzeige
    AW: Mit VBA aus einer Liste suchen
    24.02.2022 13:04:05
    Piet
    Hallo
    bitte mal die Beispieldatei anschauen, das Makro durchsucht alle vorhandenen Blätter, unbegrenzte Anzahl!
    Es kann auch nach Teilbegriffen gesucht werden. Mehrere Treffer werden nebeneinander angezeigt. Das Blatt und die Zeile!
    https://www.herber.de/bbs/user/151350.xlsm
    mfg Piet
    AW: Mit VBA aus einer Liste suchen
    24.02.2022 13:29:29
    El.
    Hallo Piet,
    zuerst mal Danke für die Testdatei.
    Habe mal ein paar Testläufe gemacht und habe festgestellt, dass z. B. "Gift" nur einmal gefunden wurde. Wenn ich aber "Gift" mit der Excel Such Funktion suchen lasse, findet er mir 4 verschiedene Dateien mit dem Wort "Gift".
    Viele Grüße
    Elfriede
    Anzeige
    AW: Mit VBA aus einer Liste suchen
    24.02.2022 13:51:16
    UweD
    Hallo
    nun wird 4x Gift gefunden.
    
    Sub Suchen_starten()
    Dim AC As Range, rFind As Range
    Dim j, sp As Integer, lz1 As Long, firstAddress As String
    With Worksheets("Suchordner")
    lz1 = .Cells(Rows.Count, 3).End(xlUp).Row
    .Range("D8:H500").ClearContents
    Application.ScreenUpdating = False
    For Each AC In .Range("C8:C" & lz1)
    sp = 4   '1. Spalte zum auflisten
    For j = 2 To Worksheets.Count
    If Worksheets(j).Name  "Suchordner" Then
    Set rFind = Worksheets(j).Cells.Find(What:=AC, After:=[a1], LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    If Not rFind Is Nothing Then
    firstAddress = rFind.Address
    Do
    .Cells(AC.Row, sp) = rFind.Row & "  " & Worksheets(j).Name
    sp = sp + 1
    Set rFind = Worksheets(j).Cells.FindNext(rFind) 'Nächstes Finden
    Loop While Not rFind Is Nothing And rFind.Address  firstAddress
    End If
    End If
    Next j
    Next AC
    End With
    MsgBox "fertig"
    End Sub
    
    LG UweD
    Anzeige
    AW: Mit VBA aus einer Liste suchen
    24.02.2022 15:32:27
    El.
    Hallo UweD,
    vielen Dank mal vorab für Dein Makro. Wie Du schon angedeutet hast, findet er jetzt in dieser Testdatei 4 mal "Gift", was ja in Ordnung ist. Das Problem ist aber folgendes, dass er jetzt - nachdem ich das mal mit der echten Datei ausprobiert habe - "Gift" 168 mal findet und das natürlich nach rechts rüber schreibt, bis in die Spalte "FN".
    Da er ja alle Dateien mit dem Wort "Gift" findet, egal ob das eine Text, PDF oder eine sonstige Datei ist, könnte man die Suche vielleicht nur für "Video Dateien" einschränken. Ich dachte daran, dass man die Suche nur auf "dvr-ms, Mpg, Mp4, ts, VOB und wtv" Dateien beschränken sollte. Wobei natürlich die "ts" Dateien, die größten Sorgen bereiten könnten, weil da bei 5 von 6 Dateien, die Endung mit *.ts, *.ts.ap, *.ts.sc usw. endet.
    Vorab mal vielen Dank
    und viele Grüße
    Elfriede
    Anzeige
    AW: Mit VBA aus einer Liste suchen
    24.02.2022 16:13:58
    UweD
    Hi
    könnte das so gehen?
    
    Sub Suchen_starten()
    Dim AC As Range, rFind As Range
    Dim j, sp As Integer, lz1 As Long, firstAddress As String
    Dim Ext As String, St As Integer
    With Worksheets("Suchordner")
    lz1 = .Cells(Rows.Count, 3).End(xlUp).Row
    .Range("D8:H500").ClearContents
    Application.ScreenUpdating = False
    For Each AC In .Range("C8:C" & lz1)
    sp = 4   '1. Spalte zum auflisten
    For j = 2 To Worksheets.Count
    If Worksheets(j).Name  "Suchordner" Then
    Set rFind = Worksheets(j).Cells.Find(What:=AC, After:=[a1], LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    If Not rFind Is Nothing Then
    firstAddress = rFind.Address
    Do
    St = InStr(rFind, ".") 'Stelle des Punktes
    Ext = Mid(rFind, St)    'Dateiendung
    Select Case Ext
    'nur Video Formate
    Case ".dvr-ms", ".Mpg", ".Mp4", ".ts", ".ts.ap", ".ts.sc", ".VOB", ".tv"
    .Cells(AC.Row, sp) = rFind.Row & "  " & Worksheets(j).Name
    sp = sp + 1
    Case Else
    'nix
    End Select
    Set rFind = Worksheets(j).Cells.FindNext(rFind) 'Nächstes Finden
    Loop While Not rFind Is Nothing And rFind.Address  firstAddress
    End If
    End If
    Next j
    Next AC
    End With
    MsgBox "fertig"
    End Sub
    
    LG UweD
    Anzeige
    AW: Mit VBA aus einer Liste suchen
    24.02.2022 19:53:21
    El.
    Hallo UweD,
    habe das neue Makro ausprobiert, wobei er bei der Originaldatei mit der Fehlermeldung "Laufzeitfehler 5 - Ungültiger Prozeduraufruf oder ungültiges Argument" die Suche abbricht.
    Das große Problem werden trotz allem die Video "*.ts" Dateien bleiben, wenn man die Dateiendung nicht auf "*.ts" begrenzen kann.
    Vorab mal Danke
    und viele Grüße
    Elfriede
    AW: Mit VBA aus einer Liste suchen
    24.02.2022 21:54:34
    Yal
    Moin!
    ich habe mir die sehr gute Arbeit von Uwe angenommen und versucht, noch mehr rauszuholen.
    War schwierig: ganz schön optimiert :-)
    Gefunden: Application.ScreenUpdating = True fehlt am Ende :-p
    Ich habe 2 reine kosmetische Punkten reingebracht:
    _ die Ergebnisse werden nicht rechts auflistet, sondern drunter. So kann man den ganzen Text der Ergebnis lesen
    _ die Ergebnis werden mit einem Link versehen, um schneller "dorthin" zu springen.
    
    Sub Suchen_starten()
    Dim AC As Range, X As Range, i
    Dim W As Worksheet
    Dim rFind As Range
    Dim firstAddress As String
    With Worksheets("Suchordner")
    .Range("A19:ZZ500").ClearContents
    For i = 5 To 12: .Range("A19:ZZ500").Borders(i).LineStyle = xlNone: Next 'Rahmen löschen
    Application.ScreenUpdating = False
    For Each AC In .Range(.Range("C8"), .Range("C99999").End(xlUp)).Cells
    With .Cells(Application.Max(19, .Range("C99999").End(xlUp).Row, .Range("D99999").End(xlUp).Row) + 1, "C")
    .Value = AC
    .Resize(1, 2).Borders(xlEdgeTop).LineStyle = xlContinuous
    End With
    For Each W In Worksheets
    If W.Name  "Suchordner" Then
    Set rFind = W.Cells.Find(What:=AC, After:=[a1], LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    If Not rFind Is Nothing Then
    firstAddress = rFind.Address
    Do
    Select Case LCase(Mid(rFind, InStrRev(rFind, "."))) 'Dateiendung in Kleinschrift
    Case ".dvr-ms", ".mpg", ".mp4", ".ts", ".ts.ap", ".ts.sc", ".vob", ".tv" 'nur Video Formate
    ActiveSheet.Hyperlinks.Add _
    Anchor:=.Cells(Application.Max(.Range("C99999").End(xlUp).Row, .Range("D99999").End(xlUp).Row) + 1, "D"), _
    Address:="", SubAddress:=rFind.Worksheet.Name & "!" & rFind.Address, _
    TextToDisplay:=rFind.Value
    End Select
    Set rFind = W.Cells.FindNext(rFind) 'Nächstes Finden
    Loop While rFind.Address  firstAddress
    End If
    End If
    Next W
    Next AC
    End With
    Application.ScreenUpdating = True
    MsgBox "fertig"
    End Sub
    
    Elfriede: mit der Satz
    "Das große Problem werden trotz allem die Video "*.ts" Dateien bleiben, wenn man die Dateiendung nicht auf "*.ts" begrenzen kann."
    kann ich gar ncihts anfangen. Was ist da gemeint?
    VG
    Yal
    Anzeige
    Mist: Fehler...
    24.02.2022 22:14:43
    Yal
    ... und zwar, wenn der Blattname einen Leerzeichen hat, funktioniert der Link nicht.
    So muss es vor und nach dem Worksheet.Name jeweils ein Hochkomma:
    
    Address:="", SubAddress:="'" & rFind.Worksheet.Name & "'!" & rFind.Address, _
    
    VG
    Yal
    AW: Mist: Fehler...
    24.02.2022 23:43:40
    El.
    Hallo Yal,
    Danke mal vorab für Dein überarbeitetes Makro. Habe es in meine Originaldatei eingefügt und auch hier bricht das Makro mit der Meldung "Laufzeitfehler 5 - Ungültiger Prozeduraufruf oder ungültiges Argument" ab. Es werden zwar einige gefundene Dateien angezeigt, aber nicht alle, weil das Programm vorher abbricht. Meine Vermutung ist die, dass das mit diesen Dateiendungen ".ts.ap", ".ts.cuts", ".ts.meta", ".ts.sc" zusammen hängt. Die eigentliche Videodatei hat nur die Endung ".ts" und die wird eigentlich nur benötigt, zum Bearbeiten. Wenn es eine Möglichkeit in VBA gäbe, diese 4 Dateien von der Suche auszuschließen, wäre glaube ich, das Problem gelöst. Aber sonst ist Deine Lösung mit den gefundenen Dateien untereinander abzuspeichern und mit dem Link zu versehen, sehr gut. Jetzt muss nur noch das andere Problem gelöst werden. Schau mal in die Tabelle "PassWEISS_2", da sind mehrere solcher ".ts" Dateien abgespeichert.
    Vorab mal vielen Dank
    und viele Grüße
    Elfriede
    Anzeige
    AW: Mist: Fehler...
    25.02.2022 10:02:39
    Yal
    Hallo Elfriede,
    kann ich leider nicht nachvollziehen. In "PassWEISS_2" ist eine ts-Datei mit "bahnhof" im Titel. Also lege Bahnhof in der Suchliste und starte das Makro.
    Es kommt dann
    20160301 2005 - rbb Brandenburg - Geheimnisvolle Orte - Bahnhof Friedrichstraße.ts
    mit Verlinkung auf "PassWEISS_2".
    Ich kann nur testen, mit dem was ich von Dir habe. Deine Suchliste ergibt keinen Treffer in dem reduzierten Umfang. Daher muss man die Suchliste anpassen.
    Ich habe der Grund für den Fehler 5 gefunden: wenn in gefundene Datei kein punkt vorhanden ist, funktioniert die Isolierung der Extension nicht und select case schlägt fehl.
    Neuer Code:
    
    Sub Suchen_starten()
    Dim AC As Range, X As Range, i
    Dim W As Worksheet
    Dim rFind As Range
    Dim firstAddress As String
    With Worksheets("Suchordner")
    .Range("A19:ZZ500").ClearContents
    For i = 5 To 12: .Range("A19:ZZ500").Borders(i).LineStyle = xlNone: Next 'Rahmen löschen
    Application.ScreenUpdating = False
    For Each AC In .Range(.Range("C8"), .Range("C99999").End(xlUp)).Cells
    With .Cells(Application.Max(19, .Range("C99999").End(xlUp).Row, .Range("D99999").End(xlUp).Row) + 1, "C")
    .Value = AC
    .Resize(1, 2).Borders(xlEdgeTop).LineStyle = xlContinuous
    End With
    For Each W In Worksheets
    If W.Name  "Suchordner" Then
    Set rFind = W.Cells.Find(What:=AC, After:=[a1], LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    If Not rFind Is Nothing Then
    firstAddress = rFind.Address
    Do
    If InStrRev(rFind, ".") > 0 Then
    Select Case LCase(Mid(rFind, InStrRev(rFind, "."))) 'Dateiendung (nach dem letzten Punkt, in Kleinschrift)
    Case ".dvr-ms", ".mpg", ".mp4", ".ts", ".ts.ap", ".ts.sc", ".vob", ".tv" 'nur Video Formate
    ActiveSheet.Hyperlinks.Add _
    Anchor:=.Cells(Application.Max(.Range("C99999").End(xlUp).Row, .Range("D99999").End(xlUp).Row) + 1, "D"), _
    Address:="", SubAddress:="'" & rFind.Worksheet.Name & "'!" & rFind.Address, _
    TextToDisplay:=rFind.Value
    End Select
    End If
    Set rFind = W.Cells.FindNext(rFind) 'Nächstes Finden
    Loop While rFind.Address  firstAddress
    End If
    End If
    Next W
    Next AC
    End With
    Application.ScreenUpdating = True
    MsgBox "fertig"
    End Sub
    
    Ich schätze deine VBA-Kompetenz höher als der bescheidenen "kaum", daher kannst Du auf alle Fälle rumspielen:
    ersetzt die Case Zeile mit
    Case ".txt"
    oder was Dir einfällt,
    und schaue was passiert.
    VG
    Yal
    Anzeige
    AW: Mist: Fehler...
    25.02.2022 11:16:34
    El.
    Hallo Yal,
    habe jetzt das neue Makro "eingepflegt" und siehe da, "kleine Ursache - große Wirkung". Es funktioniert alles Bestens. Es werden alle vorhandenen Videoformate gefunden und somit wäre das Problem gelöst. Aber wie üblich gibt es noch den berühmten "Wermutstropfen", der einem im nach hinein noch einfällt!!! (Aber nur, wenn es kein zu großer Aufwand ist, das noch nachträglich einzubringen). Und zwar wäre es gut bzw. noch besser, wenn zwischen den gefundenen Dateien, der jeweilige "Tabellenname / Fundstelle" stehen würde.
    Vielen Dank im voraus
    und viele Grüße
    Elfriede
    Anzeige
    AW: Mist: Fehler...
    25.02.2022 11:46:18
    Yal
    Hallo Elfriede,
    diese Information ist auch sichtbar, wenn die Maus kurz auf einem Link stehen bleibt. Ist aber nicht leicht zu lesen.
    Adresse kommt in Spalte E. Die Spaltenbreiten anpassen.
    Deutschland, Sachsen, Bahnhof scheinen gute Begriffe, um viel Treffer zu haben. bayer ist auch gut.
    
    Sub Suchen_starten()
    Dim AC As Range, X As Range, i
    Dim W As Worksheet
    Dim rFind As Range
    Dim firstAddress As String
    With Worksheets("Suchordner")
    .Range("A19:ZZ500").ClearContents
    For i = 5 To 12: .Range("A19:ZZ500").Borders(i).LineStyle = xlNone: Next 'Rahmen löschen
    Application.ScreenUpdating = False
    For Each AC In .Range(.Range("C8"), .Range("C99999").End(xlUp)).Cells
    With .Cells(Application.Max(19, .Range("C99999").End(xlUp).Row, .Range("D99999").End(xlUp).Row) + 1, "C")
    .Value = AC
    .Resize(1, 3).Borders(xlEdgeTop).LineStyle = xlContinuous
    End With
    For Each W In Worksheets
    If W.Name  "Suchordner" Then
    Set rFind = W.Cells.Find(What:=AC, After:=[a1], LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    If Not rFind Is Nothing Then
    firstAddress = rFind.Address
    Do
    If InStrRev(rFind, ".") > 0 Then
    Select Case LCase(Mid(rFind, InStrRev(rFind, "."))) 'Dateiendung (nach dem letzten Punkt, in Kleinschrift)
    Case ".dvr-ms", ".mpg", ".mp4", ".ts", ".ts.ap", ".ts.sc", ".vob", ".tv" 'nur Video Formate
    i = Application.Max(.Range("C99999").End(xlUp).Row, .Range("D99999").End(xlUp).Row)
    ActiveSheet.Hyperlinks.Add _
    Anchor:=.Cells(i + 1, "D"), _
    Address:="", SubAddress:="'" & rFind.Worksheet.Name & "'!" & rFind.Address, _
    TextToDisplay:=rFind.Value
    .Cells(i + 1, "E") = "'" & rFind.Worksheet.Name & "'!" & rFind.Address(0, 0)
    End Select
    End If
    Set rFind = W.Cells.FindNext(rFind) 'Nächstes Finden
    Loop While rFind.Address  firstAddress
    End If
    End If
    Next W
    Next AC
    End With
    Application.ScreenUpdating = True
    MsgBox "fertig"
    End Sub
    
    VG
    Yal
    AW: Mist: Fehler...
    25.02.2022 12:44:28
    El.
    Hallo Yal,
    wunderbar, es funktioniert alles Super. Es würde optisch natürlich besser aussehen, wenn der jeweilige "Tabellenname / Fundstelle" einmalig in Spalte D "zentriert" eingetragen würde. Eine Zeile darunter dann fortlaufend die gefundenen Dateien. Findet er Dateien in einer anderen Tabelle, das gleiche wieder, bis alle Abfragen durch sind.
    Vielen Dank im voraus
    und viele Grüße
    Elfriede
    wo die Blumentöpfe...
    25.02.2022 18:53:34
    Yal
    ...abgelegt werden, kannst Du selber bsstimmen.
    Das Makro überträgt nur Inhalte. Wenn deine Spalte D als zentiert formatiert ist, dann bleibt sie zentriert.
    Deine letzte Anforderung erreichst Du mit Sortierung. Es wäre dann sinnvoll, dass jede Zeile alle 3 Info haben:
    _ gesuchten Begriff
    _ gefundene Text, inkl. Link
    _ enthaltende Festplatte
    _ so wäre die Sortierung am einfachste
    Ich glaube, ich werde dieses Coding einrahmen.
    
    Sub Suchen_starten()
    Dim AC As Range, X As Range, i
    Dim W As Worksheet
    Dim rFind As Range
    Dim Lo As ListObject
    Dim firstAddress As String
    With Worksheets("Suchordner")
    Application.ScreenUpdating = False
    Set Lo = ListObject_HerstellenLeeren(.Cells.Worksheet)
    .Range("A21") = 0 'Dummy-Eintrag bei leerem ListObject
    For Each AC In .Range("C8").CurrentRegion.Columns(2).Cells
    For Each W In Worksheets
    If W.Name  "Suchordner" Then
    Set rFind = W.Cells.Find(What:=AC, After:=[a1], LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    If Not rFind Is Nothing Then
    firstAddress = rFind.Address
    Do
    If InStrRev(rFind, ".") > 0 Then
    Select Case LCase(Mid(rFind, InStrRev(rFind, "."))) 'Dateiendung (nach dem letzten Punkt, in Kleinschrift)
    Case ".dvr-ms", ".mpg", ".mp4", ".ts", ".ts.ap", ".ts.sc", ".vob", ".tv" 'nur Video Formate
    With .Range("A20").End(xlDown)
    .Offset(1, 0) = .Value + 1
    .Offset(1, 1) = AC.Offset(0, -1).Value
    .Offset(1, 2) = AC.Value
    ActiveSheet.Hyperlinks.Add Anchor:=.Offset(1, 3), Address:="", _
    SubAddress:="'" & rFind.Worksheet.Name & "'!" & rFind.Address, _
    TextToDisplay:=rFind.Value
    .Offset(1, 4) = "'" & rFind.Worksheet.Name & "'!" & rFind.Address(0, 0)
    End With
    End Select
    End If
    Set rFind = W.Cells.FindNext(rFind) 'Nächstes Finden
    Loop While rFind.Address  firstAddress
    End If
    End If
    Next W
    Next AC
    End With
    Lo.ListRows(1).Delete 'Dummy-Zeile löschen
    With Lo.Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .SortFields.Clear
    .SortFields.Add Key:=Lo.ListColumns("Nr").Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
    .SortFields.Add Key:=Lo.ListColumns("Treffer").Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
    .Apply
    End With
    Application.ScreenUpdating = True
    MsgBox "fertig"
    End Sub
    Private Function ListObject_HerstellenLeeren(W As Worksheet) As ListObject
    Dim Lo As ListObject, i
    On Error Resume Next
    With W
    Set Lo = W.ListObjects(1)
    If Lo Is Nothing Then
    W.Range("A20:E20") = Array("Idx", "Nr", "Begriff", "Treffer", "Position")
    W.ListObjects.Add(xlSrcRange, Range("A20:E20"), , xlYes).Name = "ErgebnisListe"
    Else
    For i = 1 To Lo.ListRows.Count: Lo.ListRows(1).Delete: Next
    End If
    End With
    Set ListObject_HerstellenLeeren = Lo
    End Function
    
    VG
    Yal
    AW: wo die Blumentöpfe...
    25.02.2022 21:41:41
    El.
    Hallo Yal,
    wunderbar, es gibt aber ein Problem und zwar bricht das Makro bei "Lo.ListRows(1).Delete 'Dummy-Zeile löschen" ab. Man kann zwar einzelne gefundene Dateien im Suchordner sehen (deswegen auch wunderbar) aber durch den Abbruch, dürfte die Ansicht vermutlich nicht vollständig sein.
    PS: Was meinst Du mit den Blumentöpfen abstellen?
    Besten Dank im voraus
    und viele Grüße
    Elfriede
    AW: wo die Blumentöpfe...
    26.02.2022 09:25:59
    Yal
    Hallo Elfriede,
    Blumentopf: ich bin eher Daten-zentrig und wenig Präsentation-afin. Ich habe daher für Themen/Fragen, die Schönheit betreffen, meistens einen begrenzte Interesse.
    Zu dem Fehler:
    Du kannst ruhig diese Zeile auskommentieren. Also aussetzen, in den Du daraus ein Kommentar-Zeile machst.
    Es geht hier darum, dass einen ListObject verwendet wird, auch als aktive Tabelle bekannt. Diese ListObject wird immer geleert, aber es bleibt immer eine leere Zeile. Diese wird am Anfang mit einem Null befüllt. Diese Codezeile sollte diese Null-Zeile wieder eliminieren. Wenn sie drin bleibt, ist es weniger schön, aber für das Ergebnis nicht relevant.
    Und trotz Abbruch ist das Ergebnis vollständig, den danach nur Sortierung stattfindet. Und ScreenUpdating wird wieder eingeschaltet.
    VG
    Yal
    AW: wo die Blumentöpfe...
    26.02.2022 10:13:31
    El.
    Hallo Yal,
    habe jetzt dieses auskommentiert, dann kam Fehler (91) wieder herein genommen und jetzt war auf einmal kein Fehler mehr bei "Lo.ListRows(1).Delete 'Dummy-Zeile löschen".Es ist durchgelaufen, bis "Fertig" gekommen ist. Nur jetzt ist es so, dass wenn ich neue Suche mit anderen Begriffen starte, die alten Suchbegriffe stehen bleiben. Es wird also vor der neuen Suche, nicht aktualisiert.
    Besten Dank im voraus
    und viele Grüße
    Elfriede
    AW: wo die Blumentöpfe...
    26.02.2022 21:12:02
    Yal
    Hallo Elfriede,
    vielleicht habe ich übersehen, dass diese Lo.ListRows(1).Delete an 2 verschiedenen Stellen vorkommt.
    Deine Meldung war aber eindeutig auf der Stelle an Ende von der Hauptprozedure basiert. Nicht auf die innerhalb von ListObject_HerstellenLeeren. Falls Du diese zweite auskommentiert hast, war es nicht so gemeint. Hier wird das vorige Ergebnis gelöscht. Deine Beschreibung nach funktioniert das Löschen des vorige Ergebnisses nicht und deutet auf diese Auskommentieren.
    VG
    Yal
    AW: wo die Blumentöpfe...
    26.02.2022 23:52:07
    El.
    Hallo Yal,
    das nächste Problem ist aufgetaucht und zwar wenn ich weniger als 10 Suchbegriffe eingebe, hängt sich Excel auf und beim Abbruch, bleibt er bei "Loop While rFind.Address firstAddress" stehen. Gibt es da die Möglichkeit, das abzuändern, so dass ich z. B. zwischen 1 Begriff und 10 Begriffen suchen kann?
    Bei dem Problem mit "Lo.ListRows(1).Delete" habe ich ja in "Sub Suchen_starten()" auskommentiert. Jetzt scheint es zu funktionieren.
    Besten Dank im voraus
    und viele Grüße
    Elfriede
    Sehr viel über ListObject gelernt
    27.02.2022 19:17:04
    Yal
    Hallo Elfriede,
    das ListObject, diese unbekannte Wesen...
    Hinzwischen habe ich vieles darüber gelernt, und die Besonderheiten einigermassen im Griff. Zum Beispiel eine Zeile am Ende eines ListObjects einzufügen ist nicht besonder einfach. Als erste Zeile dagegen sehr. praktisch, da es am Ende sortiert wird. Auch die leeren ListObject sind "sonderbar" zu handeln.
    Hier eine neue Version. Kombiniere diese nicht mit andere. Es würde schief gehen. Ich habe übersichtshalber den Code in verschiedenen Subs je nach Aufgaben unterteilt.
    
    Const cErgebnisBlatt = "Suchordner"
    Sub Suchen_starten()
    Dim AC As Range
    Dim LO As ListObject
    ThisWorkbook.Activate
    With Worksheets(cErgebnisBlatt)
    Application.ScreenUpdating = False
    Set LO = ListObject_HerstellenLeeren(.Cells.Worksheet)
    For Each AC In .Range("C8:C17").Cells
    If AC  "" Then Begriff_suchen LO, AC
    Next AC
    End With
    ListObject_sortieren LO, "Nr", xlAscending, "Treffer", xlAscending
    Application.ScreenUpdating = True
    MsgBox "fertig"
    End Sub
    Private Sub Begriff_suchen(LO As ListObject, ByVal BegriffZelle As Range)
    Dim W As Worksheet
    Dim rFind As Range
    Dim firstAddress As String
    Dim Newline As ListRow
    For Each W In Worksheets
    If W.Name  cErgebnisBlatt Then
    Set rFind = W.Cells.Find(What:=BegriffZelle, After:=[a1], LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    If Not rFind Is Nothing Then
    firstAddress = rFind.Address
    Do
    If InStrRev(rFind, ".") > 0 Then
    Select Case LCase(Mid(rFind, InStrRev(rFind, "."))) 'Dateiendung (nach dem letzten Punkt, in Kleinschrift)
    Case ".dvr-ms", ".mpg", ".mp4", ".ts", ".ts.ap", ".ts.sc", ".vob", ".tv" 'nur Video Formate
    LO.ListRows.Add 1
    With LO.ListRows(1).Range
    .Range("B1") = BegriffZelle.Offset(0, -1).Value
    .Range("C1") = BegriffZelle.Value
    LO.Parent.Hyperlinks.Add Anchor:=.Range("D1"), Address:="", _
    SubAddress:="'" & rFind.Worksheet.Name & "'!" & rFind.Address, _
    TextToDisplay:=rFind.Value
    .Range("E1") = "'" & rFind.Worksheet.Name & "'!" & rFind.Address(0, 0)
    End With
    End Select
    End If
    Set rFind = W.Cells.FindNext(rFind) 'Nächstes Finden
    Loop While rFind.Address  firstAddress
    End If
    End If
    Next W
    End Sub
    Private Sub ListObject_sortieren(LO As ListObject, ParamArray SpalteUndRichtung())
    Dim i
    On Error Resume Next
    With LO.Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .SortFields.Clear
    For i = 0 To UBound(SpalteUndRichtung) Step 2
    .SortFields.Add Key:=LO.ListColumns(SpalteUndRichtung(i)).Range, SortOn:=xlSortOnValues, Order:=SpalteUndRichtung(i + 1), DataOption:=xlSortTextAsNumbers
    Next
    .Apply
    End With
    For i = 1 To LO.ListRows.Count
    LO.ListRows(i).Range.Range("A1") = i
    Next
    End Sub
    Private Function ListObject_HerstellenLeeren(W As Worksheet) As ListObject
    Dim LO As ListObject
    Dim i
    On Error Resume Next
    With W
    Set LO = W.ListObjects(1)
    If LO Is Nothing Then
    W.ListObjects.Add(xlSrcRange, Range("A20:E20"), , xlYes).Name = "ErgebnisListe"
    Else
    For i = 1 To LO.ListRows.Count: LO.ListRows(1).Delete: Next
    End If
    End With
    LO.HeaderRowRange = Array("Idx", "Nr", "Begriff", "Treffer", "Position")
    Set ListObject_HerstellenLeeren = LO
    End Function
    
    VG
    Yal
    AW: Sehr viel über ListObject gelernt
    27.02.2022 20:59:13
    El.
    Hallo Yal,
    das "Kind ist auf der Welt"!!! Es war zwar eine schwere Geburt, aber die Mühe hat sich gelohnt. Super Arbeit von Allen die an diesem Projekt beteiligt waren, wobei der Großteil Dir "Yal" zuzuschreiben ist. Vielen Dank nochmal an Euch...
    und viele Grüße
    von Elfriede
    Filmauswahl einfacher
    28.02.2022 14:11:58
    Peter
    Hallo Elfriede,
    ich habe mir erlaubt, auch eine Lösung zu erarbeiten und übermittle Dir hier meine Datei (eigentlich Deine Datei mit meinen Ergänzungen).
    https://www.herber.de/bbs/user/151451.xlsm
    Das Heraussuchen geht ganz einfach mit nur 2 Klicks. Mit dem ersten Button werden einige Vorbereitungen getroffen: Zunächst werden die Freizeilen (Zeile 3) in den Datentabellen herausgelöscht und anschließend evtl. vorhandene frühere Ergebnisse. Mit dem zweiten Button wird die Suche durchgeführt. Die Ergebnisse erscheinen dann im Suchordner ab der Zeile 42. Es werden jeweils sämtliche Informationen zu den Suchnamen aufgeführt sowie außerdem noch der Tabellenname.
    Suchordner. In der Zelle D2 ermittelt das Programm automatisch die Anzahl der vorhandenen Tabellenblätter (die müssen alle denselben Aufbau haben). In der Zelle H8 steht ein Kennzeichen, "1" bedeutet, es werden die Leerzeilen in den Tabellen (Zeile 3) gelöscht und vorhandene frühere Ergebnisse im Suchordner; "0" bedeutet, es werden nur die früheren Ergebnisse gelöscht (weil die Leerzeilen in den Tabellen bereits entfernt wurden). Das Kennzeichen wird vom Programm automatisch von "1" auf "0" gesetzt. Das in der Spalte C einzutragende Suchkriterium bezieht sich jeweils auf die Spalte C in den Datentabellen. Es braucht nicht nach dem kompletten Namen gesucht werden, es kann auch nur ein Teil eingetragen werden, für vorausgehende Zeilentexte oder dem Eintrag nachfolgende Zeilentexte sollte ein "*" (Sternzeichen) verwendet werden. Eintragungen sind auf die Zeilen von C8 bis C34 erlaubt.
    Aufbereitung. Dieses Blatt ist für die Titelsuche wichtig. Ich benutze hier die Excel-Funktion für den erweiterten Datenfilter. Jedes Suchkriterium wird damit über die einzelnen Daten-Dateien abgefragt. Werden Eintragungen gefunden, werden diese in den Suchordner übertragen, falls keine Datensätze gefunden wurden, erscheint lediglich der Suchbegriff in dem Suchordner.
    Datenbereiche. Hier ist im Programm eine Obergrenze bis zur Zeile 5.000 vorgesehen. Diese Obergrenze läßt sich selbstverständlich anpassen.
    Bitte mal ausprobieren, Rückmeldung wäre schön.
    Mit freundlichem Gruß
    Peter Kloßek
    AW: Filmauswahl einfacher
    28.02.2022 14:36:42
    El.
    Hallo Peter,
    schön, dass Du dich auch um mein Anliegen bemüht hast. Dafür auch ein Dankeschön. Aber ich bleibe bei der Ausführung von "Yal", die eher meinen Vorstellungen entspricht. Damit ist auch meine "Anfrage" gelöst.
    Viele Grüße
    Elfriede
    AW: Mit VBA aus einer Liste suchen
    25.02.2022 08:49:45
    UweD
    Hallo nochmal.
    Welche Programmzeile ist denn beim Abbruch markiert?
    mögliche Ursache: gibt es Einträge, wo KEIN Punkt enthalten ist?
    das .TS könntest du ggf. so abfangen. (ungetestet)
    
    Select Case Ext
    'nur Video Formate
    Case ".dvr-ms", ".Mpg", ".Mp4", ".ts",  ".VOB", ".tv"
    .Cells(AC.Row, sp) = rFind.Row & "  " & Worksheets(j).Name
    sp = sp + 1
    Case ".ts.ap", ".ts.cuts", ".ts.meta", ".ts.sc"
    'nix
    Case Else
    'nix
    End Select
    
    LG UweD
    AW: Mit VBA aus einer Liste suchen
    25.02.2022 10:05:42
    El.
    Hallo UweD,
    jetzt bist Du wieder an der Reihe. Es ist auf jeden Fall schön, dass es Menschen wie "Euch" gibt, die uns nicht so "Excelvisierten" bei der Bewältigung von Excel Problemen helfen können. Das muss auch mal gesagt sein!!!
    Mit meiner Meinung, dass das Problem von den ".ts" Dateien kommen könnte, nehme ich mal wieder Abstand, weil ich mal verschiedene Suchläufe gemacht habe, die mit der Endung ".ts" zu tun hatten.
    Wenn das Makro abbricht, bleibt es bei "Select Case LCase(Mid(rFind, InStrRev(rFind, "."))) 'Dateiendung in Kleinschrift" stehen.
    Vielen Dank im voraus
    und viele Grüße
    Elfriede
    AW: Mit VBA aus einer Liste suchen
    24.02.2022 13:08:59
    Piet
    Nachtrag
    noch eine höfliche Frage aus reiner Neugier. Wie hast du die Tabellen erstellt? Mit einem Programm oder von Hand?
    mfg Piet
    AW: Mit VBA aus einer Liste suchen
    24.02.2022 13:36:02
    El.
    Hallo Piet,
    habe Deine Frage zu spät gesehen!!! Die Daten werden mit einem Makro von der Festplatte eingelesen. Das von Hand einzugeben wäre ein zu großer Aufwand. Mit dem Makro geht es "ruckizucki".
    Viele Grüße
    Elfriede

    314 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige