Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
920to924
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
920to924
920to924
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA Suchen

VBA Suchen
26.10.2007 13:32:00
Frank
Guten Tag,
ich versuche mich in VBA dank der Hilfe des Forums bin ich mit meinen Sheet bis auf
eine Kleinigkeit fast fertig.
Ich möchte statt nur in Spalte "A" wo die Bezeichnungen stehen auch in Spalte "B"
wo die Artikelnummern aufgelistet suchen.
Durch meine Änderung:
Set rngSource = Sheets(Blatt).Range("A3:A65536")
in
Set rngSource = Sheets(Blatt).Range("A3:B65536")
werden in der ListBox die Artikel nicht mehr richtig aufgeführt.
Könnte mir bitte jemand behilflich sein
Gruss
Frank
Option Explicit

Private Sub CommandButton1_Click()
Dim rng As Range, rngSource As Range
Dim strFirst As String, Blatt As String
'Tabellenname und Bereich in dem gesucht wird. - Anpassen
Blatt = ComboBox1
Set rngSource = Sheets(Blatt).Range("A3:A65536")
With ListBox1
.Clear
Range("C9") = ""
Range("C12:H12") = ""
Range("B15") = ""
If TextBox1  "" Then
Set rng = rngSource.Find(TextBox1.Text, LookAt:=xlPart)
If Not rng Is Nothing Then
strFirst = rng.Address
Do
.AddItem rng.Text
.List(.ListCount - 1, 1) = rng.Offset(0, 1).Text
.List(.ListCount - 1, 2) = rng.Offset(0, 2).Text
.List(.ListCount - 1, 3) = rng.Offset(0, 3).Text
Set rng = rngSource.FindNext(rng)
Loop While Not rng Is Nothing And rng.Address  strFirst
End If
If .ListCount > 0 Then
Range("B15") = .ListCount & " Treffer"
Else
Range("B15") = "Kein Treffer"
End If
End If
End With
Set rng = Nothing
Set rngSource = Nothing
End Sub



Private Sub CommandButton2_Click()
TextBox1 = ""
End Sub



Private Sub Label2_Click()
End Sub



Private Sub ListBox1_Click()
Range("C9") = ListBox1.Text
Range("C12") = ListBox1.List(ListBox1.ListIndex, 2)
Range("F12") = ListBox1.List(ListBox1.ListIndex, 1)
Range("H12") = ListBox1.List(ListBox1.ListIndex, 3)
End Sub



Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then CommandButton1_Click
End Sub


11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Du musst auch die gefundene spalte berücksichtigen
26.10.2007 13:53:00
NoNet
Hallo Frank,
das Makro ist zunächst nur für eine Suche in Spalte A ausgelegt.
Entsprechend der gefundenen Zelle wird dann die Listbox mit den Werten aus Spalten B:D (OffSet(0,1) bis OffSet(0,3)) gefüllt.
Wenn Du nun in A:B suchst und der WErt wird in Spalte B gefunden, dann bedeutet .OffSet(0,1) nicht mehr Spalte B sondern Spalte C, daher wird die Listbox teilweise falsch gefüllt.
Das kannst Du umgehen, indem Du im OFFSET die Spalte in der der Suchbegriff gefunden wurde, berücksichtigst :

Do
.AddItem rng.Text
.List(.ListCount - 1, 1) = rng.Offset(0, 2-rng.Column).Text
.List(.ListCount - 1, 2) = rng.Offset(0, 3-rng.Column).Text
.List(.ListCount - 1, 3) = rng.Offset(0, 4-rng.Column).Text
Set rng = rngSource.FindNext(rng)
Loop While Not rng Is Nothing And rng.Address  strFirst


oder Alternativ, indem Du einfach die Spalten FIX angibst :


Do
.AddItem rng.Text
.List(.ListCount - 1, 1) = Cells(rng.Row,"B").Text
.List(.ListCount - 1, 2) = Cells(rng.Row,"C").Text
.List(.ListCount - 1, 3) = Cells(rng.Row,"D").Text
Set rng = rngSource.FindNext(rng)
Loop While Not rng Is Nothing And rng.Address  strFirst


PS: Habe das natürlich nicht getestet, aber theoretisch sollte es so funktionieren !
Gruß, NoNet

Anzeige
AW: Du musst auch die gefundene spalte berücksicht
26.10.2007 14:08:00
Frank
Hallo NoNet,
danke für deine Hilfe, ich habe es abgeändert bekomme aber keinen Eintrag in die ListBox
wenn ich in Spalte "B "suche.
Gruss
Frank

Lade das Beispiel bitte mal hoch
26.10.2007 14:18:08
NoNet
Hallo Frank,
lade das Beispiel bitte mal bei herber "Dateiupload" hoch und poste hier den Link.
Dadruch kann man den Fehler am "lebenden Objekt" suchen.
Gruß, NoNet

OK, gecheckt - hier die Lösung
26.10.2007 14:50:55
NoNet
Hey Frank,
tausche den DO....LOOP Teil gegen diesen Code aus :

Do
.AddItem rng.Parent.Cells(rng.Row, "A").Text
.List(.ListCount - 1, 1) = rng.Parent.Cells(rng.Row, "B").Text
.List(.ListCount - 1, 2) = rng.Parent.Cells(rng.Row, "C").Text
.List(.ListCount - 1, 3) = rng.Parent.Cells(rng.Row, "D").Text
Set rng = rngSource.FindNext(rng)
Loop While Not rng Is Nothing And rng.Address  strFirst


Damit sollte das dann wie gewüscht klappen !
Gruß, NoNet

Anzeige
AW: OK, gecheckt - hier die Lösung
26.10.2007 18:04:00
Frank
Hallo NoNet,
ich habe es versucht aber leider erscheinen in der ListBox keine Einträge.
Gruss
Frank

AW: Alles OK
26.10.2007 18:11:00
Frank
Hallo NoNet,
"Kommando" zurück ich habe meinen Fehler gefunden,
dein Code funktioniert natürlich einwandfrei.
Vielen vielen Dank für deine Hilfe und ein schönes Wochenende
Gruss
Frank

Hast Du auch Suchbereich A:B angegeben ?
26.10.2007 18:15:00
NoNet
Hallo Frank,
bei mir klappt das ! Natürlich musst Du im Code auch den Suchbereich auf Spalten A:B erweitern !
Hier mein Beispiel :
https://www.herber.de/bbs/user/47153.zip
Gruß, NoNet

Anzeige
AW: Hast Du auch Suchbereich A:B angegeben ?
26.10.2007 18:35:00
Frank
Hallo NoNet,
ich hätte da doch noch eine letzte Frage?
gibt es noch eine Möglichkeit die Zellen A51:B54 von der Suche auszuschließen
da hier Zusatzinformationen enthalten sind die in der Suche nicht unbedingt
auftauchen sollten.
Gruss
Frank

Bereich per INTERSECT ausschließen
26.10.2007 19:45:00
NoNet
Hey Frank,
jetzt geht's aber langsam ins Detail ;-)
Hier die entsprechende Codeänderung :

Do
If Intersect(rng, Sheets(Blatt).[A51:B54]) Is Nothing Then
.AddItem rng.Parent.Cells(rng.Row, "A").Text
.List(.ListCount - 1, 1) = rng.Parent.Cells(rng.Row, "B").Text
.List(.ListCount - 1, 2) = rng.Parent.Cells(rng.Row, "C").Text
.List(.ListCount - 1, 3) = rng.Parent.Cells(rng.Row, "D").Text
End If
Set rng = rngSource.FindNext(rng)
Loop While Not rng Is Nothing And rng.Address  strFirst


Es wird per INTERSECT (=Schnittmenge) geprüft, ob die gefundene Zelle im Bereich [A51:B54] liegt und falls nicht, wird die Zeile zur Listbox hinzugefügt.
Gruß und schönes WE, NoNet

Anzeige
AW: Bereich per INTERSECT ausschließen
26.10.2007 19:56:00
Frank
Danke,
passt habe einiges gelernt.
Gruss
Frank

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige