Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Button führt suche durch und exportiert gefundene Zeilen

Forumthread: Button führt suche durch und exportiert gefundene Zeilen

Button führt suche durch und exportiert gefundene Zeilen
10.10.2024 14:40:24
Flo
Hallo, nachfolgend mein Code mit Erläuterungen. Der Code funktioniert leider nur bis zur hälfte und ich weiß nicht wieso. Der Button und das DropDown werden korrekt erstellt inkl. der richtigen Namen. Auch wird bei betätigen des Buttons die Datei erstellt mit korrekter Beschriftung und korrekter Überschriften. Nur leider kommt kein Inhalt da rein. Was soll passieren? Es wird ein Name aus dem DropDown Menü abgefragt. Durch betätigen des Buttons wird dann die Gesamte Datei nach diesem Namen durchsucht und alle Zeilen die gefunden wurden, sollen ausgegeben werden in einer neuen Datei. Der erste Sub funktioniert komplett. Das ist mein Code:
Sub CreateButtonAndDropdown()

Dim ws As Worksheet
Dim startWs As Worksheet
Dim dd As DropDown
Dim btn As Button
Dim cell As Range
Dim uniqueNames As Collection
Dim nameRange1 As Range
Dim nameRange2 As Range

' Arbeitsblatt "Startseite" setzen
Set startWs = ThisWorkbook.Sheets("Startseite")

' Lösche bestehende Buttons oder Dropdown-Menüs
On Error Resume Next
startWs.DropDowns("BeraterAuswahl").Delete
startWs.Buttons("SearchButton").Delete
On Error GoTo 0

' Erstelle eine Liste an unterschiedlichen Namen
Set uniqueNames = New Collection

' Definiere den Bereich der Berater Namen in Worksheet "RM"
Set nameRange1 = ThisWorkbook.Sheets("RM").Range("A3:A11")
Set nameRange2 = ThisWorkbook.Sheets("RM").Range("B3:B8")

' Durchsuche die beiden Listen nach Namen
On Error Resume Next ' Ignoriere Fehler bei doppelten Einträgen
For Each cell In nameRange1
If cell.Value > "" Then uniqueNames.Add cell.Value, CStr(cell.Value)
Next cell
For Each cell In nameRange2
If cell.Value > "" Then uniqueNames.Add cell.Value, CStr(cell.Value)
Next cell
On Error GoTo 0 ' Fehlerbehandlung zurücksetzen

' Erstelle das Dropdown-Menü für die Namenauswahl
Set dd = startWs.DropDowns.Add(10, 635, 150, 15)
dd.Name = "BeraterAuswahl"
dd.ListFillRange = "" ' Leere die Liste anfangs

' Fülle die Dropdown-Liste mit Namen
For i = 1 To uniqueNames.Count
dd.AddItem uniqueNames(i)
Next i

' Erstelle den Suchen Button um die Suche zu starten
Set btn = startWs.Buttons.Add(200, 635, 100, 30)
btn.Name = "SearchButton"
btn.OnAction = "SearchByName"
btn.Caption = "Suchen"
End Sub
Sub SearchByName()
Debug.Print "Die SearchByName Sub wurde gestartet." ' Diese Zeile zur Überprüfung ob der Code startet

Dim ws As Worksheet
Dim startWs As Worksheet
Dim newWb As Workbook
Dim newWs As Worksheet
Dim lastRow As Long
Dim searchName As String
Dim outputRow As Long
Dim i As Long
Dim j As Long
Dim cellValue As String

' Arbeitsblatt "Startseite" setzen
Set startWs = ThisWorkbook.Sheets("Startseite")

' Ausgewählten Berater aus dem Dropdown auslesen
On Error Resume Next
searchName = Trim(startWs.DropDowns("BeraterAuswahl").List(startWs.DropDowns("BeraterAuswahl").ListIndex))
On Error GoTo 0

' Prüfen, ob ein Berater ausgewählt wurde
If searchName = "" Then
MsgBox "Bitte wählen Sie einen Berater aus dem Dropdown-Menü aus.", vbExclamation
Exit Sub
End If

Debug.Print "Gesuchter Berater: " & searchName & "." ' Überprüfung, ob der richtige Berater ausgewählt wurde

' Neues Workbook erstellen für die Ergebnisse
Set newWb = Workbooks.Add
Set newWs = newWb.Sheets(1)
newWb.SaveAs "Suchergebnisse_Nichtkunden_" & searchName & ".xlsx"

' Spaltenüberschriften in das neue Arbeitsblatt einfügen
With newWs
.Range("A1").Value = "Firma"
.Range("B1").Value = "Ort"
.Range("C1").Value = "Geschäftszweck"
.Range("D1").Value = "Umsatz in M€"
.Range("E1").Value = "Ansprechpartner"
.Range("F1").Value = "Letzter Kontakt"
.Range("G1").Value = "Information"
End With

outputRow = 2 'Startreihe für Daten

Debug.Print "Neue Datei wurde erstellt."

' Durchsuche alle Arbeitsblätter nach dem gesuchten Berater
For Each ws In ThisWorkbook.Sheets
If ws.Name > "Startseite" And ws.Name > "RM" And ws.Name > "Blanko" Then ' Überspringe die anderen Blätter
lastRow = ws.Cells(ws.Rows.Count, 1).End(x1Up).Row ' Letzte Zeile im aktuellen Blatt

Set searchRange = ws.Range("A9:H" & lastRow) ' Definiert den Suchbereich zwischen A9 und der letzten Zeile

Debug.Print "Suchbereich definiert"

' Suche nach dem Berater im Suchbereich
Set foundCell = searchRange.Find(What:=searchName, LookIn:=x1Values, LookAt:=x1Part)

If Not foundCell Is Nothing Then
firstAdress = foundCell.Adress ' Speicher die erste Adresse

Debug.Print "Erste Adresse gespeichert"
Do
' Überprüfe, ob die gefundene Zelle in die neue Datei kopiert werden soll
' Hier wird die gesamte Zeile kopiert, man kann dies anpassen je nach Bedarf
ws.Rows(foundCell.Row).Copy Destination:=newWs.Rows(outputRow)
outputRow = outputRow + 1 'Nächste Zeile in der neuen Datei
Set foundCell = searchRange.FindNext(foundCell) ' Nächste Fundstelle suchen
Loop While Not foundCell Is Nothing And foundCell.Address > firstAdress
End If
End If
Next ws

Debug.Print "Suche abgeschlossen."
MsgBox "Sie Suche nach " & searchName & "wurde abgeschlossen. Die Ergenisse wurden gespeichert.", vbInformation
End Sub
Anzeige
AW: Button führt suche durch und exportiert gefundene Zeilen
10.10.2024 14:46:30
Onur
Code ohne die Datei bringt nix.
Wie soll man ihn testen?
AW: Button führt suche durch und exportiert gefundene Zeilen
10.10.2024 15:31:09
ralf_b
du könntest ein par mehr debug.print Anweisungen verwenden und prüfen was dein Code so auswirft. Speziell dort wo gesucht und gefunden wird.
AW: Button führt suche durch und exportiert gefundene Zeilen
10.10.2024 15:34:42
Flo
Danke, dass habe ich (s.o.)

bei "Neue Datei wurde erstellt." funktioniert der Code noch aber bei Debug.Print "Suchbereich definiert" passiert schon nichts mehr. P.S. eine Datei kann ich derzeit nicht hochladen. Vielleicht sieht ja jemand den Fehler.
Anzeige
AW: Button führt suche durch und exportiert gefundene Zeilen
10.10.2024 15:38:52
peter
Hallo

LookIn:=x1Values, LookAt:=x1Part

soll wohl xlValues bzw. xlPart heissen (also "L" statt "1")

Peter
AW: Button führt suche durch und exportiert gefundene Zeilen
10.10.2024 20:53:59
ralf_b
mach die Schreibfehler raus und evtl noch die fehlenden Variablendeklarationen nachpflegen, dann geht auch der Code. wie bereits zu lesen war, "Option explicit" ist dein Freund.
Anzeige
AW: Button führt suche durch und exportiert gefundene Zeilen
10.10.2024 15:47:37
Flo
Danke, habe es auf ein kleines "L" geändert. Das gleiche bei "x1Up?" also xLUp? Allerdings hat dies nicht am Ergebnis geändert. Es entsteht eine Datei mit korrekter Beschriftung + korrekter Spaltenüberschriften jedoch kein Inhalt.
AW: Button führt suche durch und exportiert gefundene Zeilen
10.10.2024 15:49:28
Onur
Solange du nicht endlich die Datei POSTEST, musst du dich mit Herumraterei begnügen.
Anzeige
AW: Button führt suche durch und exportiert gefundene Zeilen
10.10.2024 15:51:24
Flo
Leider kann ich die Datei derzeit nicht über mein Handy hochladen und muss warten bis ich Zuhause bin. Vielleicht findet sich dennoch in der Zwischenzeit eine Lösung. Es können ja auch simple Syntax Fehler sein wie 1 statt l.
AW: Button führt suche durch und exportiert gefundene Zeilen
10.10.2024 15:56:05
Onur
Ohne die Datei muss man den Code Wort für Wort, Zeile für Zeile analysieren und hoffen, dass es ein simpler Fehler ist und man ihn zufällig entdeckt.
Aber wie du siehst, kann ein Code fehlerhaft sein, OHNE eine Fehlermeldung zu produzieren, weil da nur ein (oder mehrere) Denkfehler drin steckt.
Anzeige
AW: Button führt suche durch und exportiert gefundene Zeilen
10.10.2024 15:58:03
Flo
Datei kommt gleich. Fehlermeldung bei Ausführung ist "400".
AW: Button führt suche durch und exportiert gefundene Zeilen
10.10.2024 15:59:04
Onur
Ich warte lieber die Datei ab.
AW: Button führt suche durch und exportiert gefundene Zeilen
10.10.2024 16:24:23
peter
Hallo

firstAdress = foundCell.Adress

soll wohl firstAdress = foundCell.Address heißen.

Peter
Anzeige
AW: Button führt suche durch und exportiert gefundene Zeilen
10.10.2024 17:52:57
AlterDresdner
Und noch ein kleiner, aber vermutlich wirkungsvoller Hinweis: Die Zeile Option Explicit am Beginn des Codes (kann man auch in den Optionen des VBAEditors mit Variablendeklaration erforderlich standardmäßig einstellen) bringt alle solche Schreibfehler an das Licht des Tages!
Gruß der AlteDresdner
Anzeige
AW: Button führt suche durch und exportiert gefundene Zeilen
10.10.2024 16:19:55
emkaes
Hallo,

du verwendest on error resume next extensiv. Deshalb fallen dir auch Tipp- und Schreibfehler nicht auf.

Das solltest du bei der Erstellung von Code vermeiden. Erst, wenn dein Code macht, was er soll, kannst du on error ... benutzen, um Fehler abzufangen, ohne diese durch ein eigenständiges Errorhandling abzuarbeiten.

Bist du sicher, dass deine Searchrange mehr Zeilen hat als nur die Zeile 9? Dein lastrow ermittelt die letzte gefüllte Zelle in Spalte A!

Wenn du die o.a. Fehler beseitigt hast, bringt dein Code auch das gewünschte Ergebnis
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige