Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1364to1368
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
Suche in mehreren Spalten mit VBA
26.06.2014 10:12:16
Franz
Hallo zusammen!
Ich habe mir ein nettes Tool mit Hilfe vieler Beispieldateien zusammengebastelt, um ein paar Kundendaten verwalten zu können. Nun würde ich gerne eine bestehende Suchfunktion auf mehrere Spalten erweitern, leider gelingt mir das nicht so richtig.
Zur besseren Veranschaulichung habe ich die Datei angehängt!
https://www.herber.de/bbs/user/91266.xlsm
Aktuell kann ich in einer Zeile nach Ansprechpartner suchen. In meinem Formular gibt es allerdings pro Unternehmen oft mehrere Ansprechpartner (z.B. "T GmbH"), die im Formular untereinander dargestellt, in der Tabelle in jeweils einer Spalte abgebildet werden. Es wäre nun toll, wenn ich in der ersten Zeile (= Suchfeld) auch nach anderen Ansprechpartnern (also in anderen Spalten) suchen könnte. Ich habe schon experimentiert, allerdings werden Treffer aus anderen Spalten immer im "Suchfeld" angezeigt und somit die restlichen Einträge verschoben.
Ich bin für jeden Tipp dankbar, da ich absolut nicht weiter weiß!
Lg Franz

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suche in mehreren Spalten mit VBA
26.06.2014 14:46:56
fcs
Hallo Franz,
hier das angepasste Makro zur Suche nach den Nachnamen der Ansprechpartner in allen Nachname-Spalten.
Gruß
Franz
'   Suchen 1. Ansprechpartner
Private Sub CommandButton8_Click()
Dim WkSh        As Worksheet
Dim lLetzte     As Long, lSpalte As Long
Dim myRange     As Range, SearchRange As Range
Dim strAddress  As String
Dim bolAbbruch  As Boolean
CommandButton1.Enabled = False  ' Ändern-Button sperren
CommandButton3.Enabled = False  ' Löschen-Button sperren
Set WkSh = Worksheets("Daten")
lLetzte = WkSh.Range("C65536").End(xlUp).Row
If lLetzte  strAddress Then
myRange.Activate
FundZeile = ActiveCell.Row
GoSub Anzeigen
End If
End If
Loop While Not myRange Is Nothing And myRange.Address  strAddress
If Not bolAbbruch Then
MsgBox "Keine weiteren Datensätze gefunden.", _
48, "   Information für " & Application.UserName
FundZeile = 0
Else
MsgBox "Keinen übereinstimmenden Datensatz gefunden", _
48, "   Information für " & Application.UserName
FundZeile = 0
End If
Else
MsgBox "Keinen übereinstimmenden Datensatz gefunden", _
48, "   Information für " & Application.UserName
FundZeile = 0
With TextBox4
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
End If
End With
End If
CommandButton1.Enabled = False  ' Ändern-Button sperren
CommandButton3.Enabled = False  ' Löschen-Button sperren
Exit Sub
Anzeigen:
If FundZeile = 0 Then Exit Sub
With WkSh.Cells(FundZeile, 3)
TextBox1.Value = .Offset(0, -2).Value     ' Firma
TextBox2.Value = .Offset(0, -1).Value     ' Titel
TextBox3.Value = .Offset(0, 0).Value      ' Nachname
TextBox4.Value = .Offset(0, 1).Value      ' Vorname
TextBox5.Value = .Offset(0, 2).Value      ' aktiv
TextBox6.Value = .Offset(0, 3).Value      ' Titel
TextBox7.Value = .Offset(0, 4).Value      ' Nachname
TextBox8.Value = .Offset(0, 5).Value      ' Vorname
TextBox9.Value = .Offset(0, 6).Value      ' aktiv
TextBox10.Value = .Offset(0, 7).Value     ' Titel
TextBox11.Value = .Offset(0, 8).Value     ' Nachname
TextBox12.Value = .Offset(0, 9).Value     ' Vorname
TextBox13.Value = .Offset(0, 10).Value    ' aktiv
TextBox14.Value = .Offset(0, 11).Value    ' Titel
TextBox15.Value = .Offset(0, 12).Value    ' Nachname
TextBox16.Value = .Offset(0, 13).Value    ' Vorname
TextBox17.Value = .Offset(0, 14).Value    ' aktiv
TextBox18.Value = .Offset(0, 15).Value    ' Titel
TextBox19.Value = .Offset(0, 16).Value    ' Nachname
TextBox20.Value = .Offset(0, 17).Value    ' Vorname
TextBox21.Value = .Offset(0, 18).Value    ' aktiv
TextBox22.Value = .Offset(0, 19).Value    ' Titel
TextBox23.Value = .Offset(0, 20).Value    ' Nachname
TextBox24.Value = .Offset(0, 21).Value    ' Vorname
TextBox25.Value = .Offset(0, 22).Value    ' aktiv
TextBox26.Value = .Offset(0, 23).Value    ' Notizen
End With
CommandButton1.Enabled = True  ' Ändern-Button freigeben
CommandButton3.Enabled = True  ' Löschen-Button freigeben
Return
End Sub

Anzeige
AW: Suche in mehreren Spalten mit VBA
30.06.2014 10:58:31
Franz
Vielen Dank Franz für deine tolle Hilfe! Das Makro funktioniert hervorragend!
Ich hätte noch eine Frage, da ich gerade zufällig über einen Fehler gestolpert bin. Wenn ich einen beliebigen Eintrag suche (egal ob mittels Suche nach Firma oder Ansprechpartner) und diesen dann lösche, erhalte ich einen Laufzeitfehler mit ungültigem Argument. Die betroffene Codezeile ist:
ListBox1.RemoveItem ListBox1.ListIndex

Dürfte ich diesbezüglich nochmals um deine kompetente Hilfe bitten?
https://www.herber.de/bbs/user/91324.xlsm
Lg Franz

Anzeige
AW: Suche in mehreren Spalten mit VBA
30.06.2014 11:42:40
fcs
Hallo Franz,
du darfst hier nicht "einfach" die Zeile aus der Listbox1 entfernen. Du musst die Listbox1 komplett neu mit den Daten aus der Tabelle "Daten" füllen - wie bei der 1. Anzeige des Userforms.
Nach dem Löschen einer Zeile in der Tabelle stimmen die in Spalte 26 der Listbox gespeicherten Zeilennummern nicht mehr ab der vorher gelöschten Zeile. Die Variable "FundZeile" wird ggf. mit einem falschen Zeilenwert gefüllt und Folgeaktionen im Userform liefern also ggf. falsche Daten.
Nachfolgend eine Anpassung deines Makros, die korrekte Werte liefern sollte.
Gruß
Franz
Private Sub CommandButton3_Click()
Dim lLetzte  As Long
With Worksheets("Daten")
.Unprotect Password:="1234567"
If FundZeile  0 Then
If MsgBox("Soll der Eintrag  """ & TextBox1.Value & " - " & _
TextBox3.Value & " " & TextBox4.Value & """  wirklich gelöscht werden?", _
vbYesNo + vbQuestion, "    Eintrag löschen") = vbYes Then
.Rows(FundZeile).Delete Shift:=xlUp
.Columns("A:Z").EntireColumn.AutoFit
Call Zeilen_faerben
Call Array_fuellen
With ListBox1
.Clear                              ' ListBox leeren
If WorksheetFunction.CountA(aTmp()) > 0 Then
.Column = aTmp
End If
.ListIndex = -1
End With
End If
Dim iIndex  As Integer
For iIndex = 1 To 26
With Controls("TextBox" & iIndex)
.Value = ""
End With
Next iIndex
End If
TextBox5.Value = "Ja"
TextBox9.Value = "----"
TextBox13.Value = "----"
TextBox17.Value = "----"
TextBox21.Value = "----"
TextBox25.Value = "----"
.Protect Password:="1234567"
End With
With Worksheets("Daten")
lLetzte = IIf(IsEmpty(.Cells(Rows.Count, 1)), _
.Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
If lLetzte 

Anzeige
AW: Suche in mehreren Spalten mit VBA
30.06.2014 14:57:41
Franz
Vielen Dank für die Hilfe! Es funktioniert wunderbar!
Nach langem Grübeln, denke ich, dass ich es halbwegs verstehe! Ich muss hier wohl noch einiges lernen! ;)
Nochmals danke!
Lg Franz

322 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige