Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1412to1416
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

Suchfunktion Auswahlliste

Suchfunktion Auswahlliste
04.03.2015 10:05:54
Stefan Resch

Guten Morgen!
Bin ein Grünschnabel was die Arbeit mit VBA betrifft und bin leider im Forum nicht fündig _
geworden, deshalb hier mein Problem: Bin am Erstellen einer Kundendatenbank, bei der für jeden _ Kunden, der über Userform angelegt wird, ein eigenes Tabellenblatt erstellt wird. Ich habe danach eine Suchfunktion angelegt, welche die einzelnen Tabellenblätter durchsucht und des gesuchte Blatt aktiviert. Ich möchte diese Funktion aber noch verbessern. Falls zwei Kunden z.B den gleichen Nachnamen haben wird meine Suche nicht mehr exakt funktionieren. Zur Anschung mein Code für die Suche:


Private Sub CommandButton1_Click()
Dim wks As Excel.Worksheet
Dim strSuch As String
strSuch = tsuche.Value
For Each wks In ThisWorkbook.Worksheets
If InStr(1, wks.Name, strSuch, vbTextCompare) > 0 Then
Exit For
End If
Next
If Not wks Is Nothing Then
Call wks.Activate
End If
Unload Me
End Sub

Ist es möglich diese Funktion so zu modifizieren, dass, falls der gesuchte Kunde (z.B: Mayer) auf zwei oder mehrere Tabellenblätter zutrifft, ein Auswahlfenster oder ähnliches aufscheint, in welchen man aus allen möglichen Tabellenblättern den Kunden auswählen kann?
Ich hoffe ich habe mich verständlich ausgedrückt.
MfG

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchfunktion Auswahlliste
04.03.2015 10:27:03
Rudi Maintaire
Hallo,
bau dir zusätzlich eine Listbox (ListBox1) in deine Userform ein.
Code:
Private Sub CommandButton1_Click()
Dim wks As Worksheet
Dim strSuch As String, vWks
strSuch = tSuche.Value
For Each wks In ThisWorkbook.Worksheets
If InStr(1, wks.Name, strSuch, vbTextCompare) > 0 Then
vWks = vWks & "|" & wks.Name
End If
Next
If Len(vWks) Then
vWks = Mid(vWks, 2)
vWks = Split(vWks, "|")
If UBound(vWks) > 0 Then
With ListBox1
.List = vWks
.Visible = True
End With
Else
Worksheets(vWks(0)).Activate
Unload Me
End If
End If
End Sub
Private Sub ListBox1_Click()
Worksheets(ListBox1.Value).Activate
Unload Me
End Sub
Private Sub UserForm_Activate()
With ListBox1
.Clear
.Visible = False
End With
End Sub

Gruß
Rudi

Anzeige
AW: Suchfunktion Auswahlliste
04.03.2015 10:47:48
Stefan Resch
Ein doppeltes Dankeschön an dich, zuerst für die schnelle Antwort und dann für die Lösung meines Problems.
Funktioniert einwandfrei!!!
Einen schönen Tag noch

AW: Suchfunktion Auswahlliste
04.03.2015 10:33:35
Klexy
Mayer kann nicht auf 2 oder mehrere Tabellenblätter zutreffen, weil keine zwei identisch benannten Tabellenblätter möglich sind.
Das Userform muss also bei der Erstellung eines neuen Tabellenblattes abfragen, ob der Name schon existiert und ggf. das Tabellenblatt "Mayer1" anlegen.
In Europa haben die Leute normalerweise Name und Vorname. Daher sollte das Tabellenblatt "MayerFritz" heißen. Was aber wenn es einen zweiten Fritz Mayer gibt?
Endgültige Lösung: gleich beim ersten Fritz Mayer den Blattnamen "MayerFritz01" vergeben (oder "MayerFritz001" - je nachdem mit wievielen möglichen Doubletten des häufigst möglichen Namen gerechnet werden muss - und dazu noch 50% Sicherheitsaufschlag)
Wenn man dann sucht, muss man entweder von vorherein wissen, ob der gesuchte Fritz der 01 oder der 02 ist, oder die Blattnamen nur nach den ersten (n-2) Zeichen durchsuchen und in einem Array ausgeben, das dann sinnvollerweise zu jedem z.B. die Adresse anzeigt, um sie nicht nur technisch sondern auch praktisch unterscheiden zu können.
Es stehen dir auf jeden Fall ein paar lange Nächte bevor.

Anzeige
AW: Suchfunktion Auswahlliste
04.03.2015 10:47:03
Stefan Resch
da stimme ich dir nicht ganz zu. Da meine Suchfunktion die Tabellenbattnamen nach Textteilen durchsucht, kann der Suchbegriff "mayer" z.B: auf den Kunden Mayer, Mayerhofer, Strohmayer oder ähnliche Namen zugreifen. Da sich die Datenbank auch großteils auf Gemeinden und Firmen und nicht auf Privatkunden bezieht, werden auch keine zwei Tabellenblätter denselben Namen tragen, aber das konntest du nicht wissen. Mayer war nur ein allgemeines Beispiel. Aber danke für deine rasche Antwort und deinen Lösungsvorschlag.
Schönen Tag noch!

AW: Suchfunktion Auswahlliste
04.03.2015 11:29:21
Klexy
Alles klar. Wichtig ist nur, die Möglichkeit einer Doublette bei der Erstellung eines neuen Blattes abzufangen. Da die Wahrscheinlichkeit gering zu sein scheint, genügt es, erst beim zweiten identischen Namen eine "2" dranzuhängen.
Ein weiterer Punkt, den man beim Spiel mit Tabellenblättern beachten muss ist die Begrenzung auf 31 Zeichen. Das bedeutet in der Praxis, dass man bei der Erstellung auf 30 Zeichen begrenzen sollte, um ggf. Platz für die "2" zu haben.
Eine unendliche Geschichte, durch die ich mich in einem ähnlichen Fall mal kämpfen musste.
Ich würde vorne in der Datei ein Tabellenblatt mit einer Art Inhaltsverzeichnis empfehlen, wo jedes neu erstellte Blatt automatisch eingetragen wird und am besten automatisch mit einem Link zum entsprechenden Blatt versehen wird. Umgekehrt sollte in jedem Firmenblatt eine Sprungmarke zum Übersichtsblatt vorhanden sein.

Anzeige
AW: Suchfunktion Auswahlliste
04.03.2015 11:55:02
Stefan Resch
Danke für die Information. Habe den Code bei der Eingabemaske für die Erstellung der Kunden so geändert, dass er zusätzlich zum Firmen- bzw. Gemeindenamen auch noch die PLZ als Tabellenblattnamen übernimmt. Beispiel: Test GmbH 8142. Das sollte das Problem einer Doublette beseitigen.
Die Zeichenbegrenzung werde ich noch in einem Informationsfenster in der Submaske erwähnen, danke für den Tipp.
Die Alternative mit dem Inhaltsverzeichnis finde ich gut, nur, wie schon bei meiner Problemstellung erwähnt, sind meine VB-Kentnisse bescheiden. Wenn du mir den Code oder zumindest einen Anhaltspunkt für die Umsetzung schicken könntest wäre ich dir sehr dankbar.

Anzeige
AW: Suchfunktion Auswahlliste
04.03.2015 14:04:51
Klexy
Das musst du in dein bisheriges Erstellungsmakro einbauen oder daraus aufrufen, sobald das neue Blatt fertig erstellt und benannt ist:

Sub Inhaltsverzeichnis()
Dim NeuBlattName As String
Dim InhaltsblattName As String
Dim Sprungmarke As Range
Dim InhaltsPosition As String
NeuBlattName = ActiveSheet.Name
InhaltsblattName = "Inhalt" 'hier den Namen des Inhaltsblattes eintragen
Set Sprungmarke = Range("K1") ' hier die Zelle, wo die Sprungmarke zum Inhalt sein soll
Sheets(InhaltsblattName).Select
'Blattname soll in die erste leere Zeile in Spalte A geschrieben werden
Range("A10000").End(xlUp).Offset(1, 0).Select 'hier komme ich lieber von unten, dann  _
funktioniert es auch beim allerersten Eintrag ohne Probleme
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:=NeuBlattName & "!A1",  _
TextToDisplay:=NeuBlattName
InhaltsPosition = ActiveCell.Address
' und jetzt zurück ins neue Blatt und die Sprungmarke zum Inhaltsverzeichnis setzen
Sheets(NeuBlattName).Select
Sprungmarke.Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:=InhaltsblattName & "!" &  _
InhaltsPosition, TextToDisplay:="zum Inhaltsverzeichnis"
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige