Suchmaschine über VBA

Betrifft: Suchmaschine über VBA
von: Janine Demski
Geschrieben am: 27.11.2020 21:13:43
Hallo!
Ich habe eine Tabelle (Anwesenheit des Personals).
In dem Ersten Blatt steht
A5 B5 C5 ......................................................viele weitere Daten................................ VH5
DG Name Vorname ................................................................................................................... E-Mail
H Schmidt Maik ................................................................................................................... a@web.de
OF Müller Fred ................................................................................................................... b@gmail.com
OSG Zonk Lio .................................................................................................................... c@web.de
usw.
nun möchte ich auf einem separatem Blatt in der Datei eine Suchmaschiene erstellen.
Name Vorname DG (hier möchte ich den gesuchten Namen eingeben und den Vornamen und DG nur ausfüllen wenn Name zweimal auftaucht - entweder Vorname oder DG eingeben)
und hier stehen dann alle Daten die ich suche
Name ........................... Besoldung ........................
Vorname ........................... Kostenstelle ..........................
DG ............................
Adresse ............................ und noch ein paar Sachen
Hoffe ihr versteht was ich meine. Mit einem normalen =SVERWEIS in excel funktioniert es leider nicht.
Könnt ihr mir helfen wie ich dafür eine VBA erstellen kann?
(Über SVERWEIS in Excel habe ich 3 Probleme:
1. meine Daten werden nur ab Spalte 2 wiedergegeben
2. ich kann mir nicht aussuchen welches der drei Suchkriterien mir vorliegt (manchmal habe ich zb nur den Vornamen)
3. Sobald ein Name zweimal vorkommt, bekomme ich nur die Daten zu dem zuerst gefunden)

Betrifft: AW: Suchmaschine über VBA
von: fcs
Geschrieben am: 28.11.2020 09:13:13
Hallo Janine,
ich hab dir etwas VBA-basiertes zur Unterstützung der Suche per Userform erstellt.
Das Userform wird per Doppelklick auf bestimmte Zellen im 2. Tabellenblatt angezeigt (sind hellgrün gefüllt).
Während der Eingabe der Suchbegriffe in die Textboxen werden die Treffer in einer Listbox angezeigt.
Bei nur 1 Treffer oder Anklicken eines Namens in der Listbox wird die zugehörige Zeilennummer in Zelle B1 eingetragen und das Userform ausgeblendet.
Die gesuchten Werte in der 2. Tabelle werden per Funktion INDEX berechnet.
Link zur Beispieldatei:
https://www.herber.de/bbs/user/141899.xlsm
Das Userform kannst du im VBA-Editor per Drag&Drop in deine Datei kopieren. Den Code unter Tabelle2 musst du markieren, kopieren und in deiner Datei unter dem entsprechenden Tabellenblatt-Modul in deiner Datei einfügen.
Zum Schluß musst dann ggf. im Code noch die Zelladressen anpassen, bei denen bei Doppelklick das Userform angezeigt werden soll und die Zelle in die Zeilennummer eingetragen werden soll.
LG
Franz

Betrifft: AW: Suchmaschine über VBA
von: Janine Demski
Geschrieben am: 28.11.2020 11:24:47
Hallo Franz! Danke für deine Bemühungen und deine Hilfe! Es klappt soweit alles!
Nur habe ich jetzt folgendes Problem. Bei Doppelklick öffnet er mir die Suchmaske - Top! und er füllt mir alle Namen ein - Top! und wenn ich auf den gewünschten Namen klicke, dann schließt er die Maske wieder und befüllt alles was ich brauche - doppel Top!!!!
ABER, wenn ich in der Suchmaske etwas eingeben möchte, dann öffnet er den Code und Meldet mir folgenden Fehler
Fehler beim Kompilieren: Projekt oder Bibliothek nicht gefunden.
Weißt du was ich falsch gemacht habe? Ich finde den Fehler einfach nicht :(

Betrifft: AW: Suchmaschine über VBA
von: fcs
Geschrieben am: 28.11.2020 13:18:35
Hallo Janine,
du verwendest mit Excel Version 16.0 ja die gleiche Version wie ich. Da ist es jetzt schwierig das Problem einzugrenzen.
1. Versuch:
Prüfe bei geöffneter Datei mal im VBA-Editor unter Menü Extras --> Verweise die Verweise.
Das sollte mindestens so aussehen, dass die markierten Verweise auch bei dir als aktiv markiert sind.
Manchmal - speziell wenn man zwischen älteren und neuen Versionen von Excel wechselt - dann stimmen die Verweise nicht mehr und man muss sie neu setzen.
2. Versuch
manchmal - auch bei Wechsel zwischen Excel-Versionen- funktionieren nicht. Hier hilft es, wenn man vor die Excel-VBA-Funktionen im Code jeweils "VBA." einfügt. Dann funktioniert es wieder.
Hier müsstest du das Makro, das nach Eingabe in die Text-Boxen gestartet wird wie folgt anpassen.
Viel Glück bei der Fehlersuche
Franz
Private Sub prcUpdateListboxAuswahl()
Dim lngZeile As Long, Spalte As Long
Dim sDG As String, sName As String, sVorname As String
Dim AnzTreffer As Long
mbolListboxExit = True
sDG = LCase(Me.TextBox_DG)
sName = LCase(Me.TextBoxName)
sVorname = LCase(Me.TextBoxVorname)
If sDG & sName & sVorname = "" Then
Me.ListBox1.List = marrAlle
Me.Label_gefunden.Visible = False
Else
'Anzahl der Treffer ermitteln
AnzTreffer = 0
For lngZeile = LBound(marrAlle, 1) To UBound(marrAlle, 1)
If (VBA.Left(LCase(marrAlle(lngZeile, 1)), VBA.Len(sDG)) = sDG Or sDG = "") _
And (VBA.Left(LCase(marrAlle(lngZeile, 2)), VBA.Len(sName)) = sName Or sName = "") _
_
And (VBA.Left(LCase(marrAlle(lngZeile, 3)), VBA.Len(sVorname)) = sVorname Or _
sVorname = "") Then
AnzTreffer = AnzTreffer + 1
End If
Next
If AnzTreffer > 0 Then
'Auswahlliste für Listbox mit Teffern füllen
ReDim marrFilter(1 To AnzTreffer, 1 To UBound(marrAlle, 2))
AnzTreffer = 0
For lngZeile = LBound(marrAlle, 1) To UBound(marrAlle, 1)
If (VBA.Left(LCase(marrAlle(lngZeile, 1)), VBA.Len(sDG)) = sDG Or sDG = "") _
And (VBA.Left(LCase(marrAlle(lngZeile, 2)), VBA.Len(sName)) = sName Or sName = "") _
_
And (VBA.Left(LCase(marrAlle(lngZeile, 3)), VBA.Len(sVorname)) = sVorname Or _
sVorname = "") Then
AnzTreffer = AnzTreffer + 1
For Spalte = 1 To UBound(marrAlle, 2)
marrFilter(AnzTreffer, Spalte) = marrAlle(lngZeile, Spalte)
Next
End If
Next
Me.ListBox1.List = marrFilter
Me.Label_gefunden.Visible = False
If AnzTreffer = 1 And CheckBox_1_Treffer = True Then
'Zeilennumer des gefundenen Eintrags in Tabellenblatt eintragen
wksSuche.Range(mcZelle).Value = VBA.Val(marrFilter(1, UBound(marrFilter, 2)))
Me.Hide
End If
Else
Me.Label_gefunden.Visible = True
End If
End If
mbolListboxExit = False
End Sub

Betrifft: AW: Suchmaschine über VBA
von: Janine Demski
Geschrieben am: 28.11.2020 14:58:25
In meinem VBA Editor waren 2 Häkchen mehr als bei dir. Hab diese entfernt und jetzt funktioniert es!
Wahnsinn!! Ich danke dir 1000 Mal!