94451
Goto Top

Formulare, Listboxen und durchsuchen von Tabellen

Hallo Ihr,

dieses Script hat mir schon sehr weitergeholfen...
hab ich 'fast' so in den Tiefen des Internets gefunden:

    With Worksheets("Lieferanten").Range("A:A")  
    editForm.lieferList.Clear
      Set rngCell = .Find("*" & editForm.listTextb.value & "*", LookIn:=xlValues, lookat:=xlWhole)  
        If Not rngCell Is Nothing Then
          strFirstAddress = rngCell.Address
          Do
            With editForm.lieferList
            .ColumnCount = 4
              .AddItem
              .List(.ListCount - 1, 0) = rngCell.value
              .List(.ListCount - 1, 1) = rngCell.Offset(0, 1).value
              .List(.ListCount - 1, 2) = rngCell.Offset(0, 2).value
              .List(.ListCount - 1, 3) = rngCell.Offset(0, 3).value
              .ColumnWidths = "2,5cm;1,5cm;2,5cm;2,5cm"  
            End With
            Set rngCell = .FindNext(rngCell)
            Loop While Not rngCell Is Nothing And rngCell.Address <> strFirstAddress
          Else
           MsgBox "Lieferant nicht gefunden", 48  
        End If
    End With


er holt sich meine Kontaktliste und füllt meine Liste nach bedarf auf!

Frage 1:
hier wird vermutlich die Suche durchgeführt
Set rngCell = .Find("*" & editForm.listTextb.value & "*", LookIn:=xlValues, lookat:=xlWhole)
wie kann ich bestimmen welche Spalte durchsucht wird?

Frage 2:
ist es möglich mehrere Spalten gleichzeitig zu durchsuchen? Wenn ja wie?
- wenn nein, wie mache ich das am geschicktesten, das ich bei jeder suche Triggern kann welche Spalte ich jetzt durchsuche (würde dann neben dem Suchbutton noch ne dropdown mit der Suchspalte machen)

Frage 3:
ich habe in meiner Tabelle Überschriften... diese werden vom Formular mit übernommen! wie kann ich die ausschließen?
damit bin ich gescheitert:
With Worksheets("Lieferanten").Range("A:A").Offset(1, 0)


Ich freue mich für jeden Tipp

Danke

RoadRunner

Content-Key: 264667

Url: https://administrator.de/contentid/264667

Ausgedruckt am: 28.03.2024 um 13:03 Uhr

Mitglied: 114757
114757 26.02.2015 aktualisiert um 20:43:50 Uhr
Goto Top
Zitat von @94451:
Frage 1:
hier wird vermutlich die Suche durchgeführt
> Set rngCell = .Find("*" & editForm.listTextb.value & "*", LookIn:=xlValues,
lookat:=xlWhole)
wie kann ich bestimmen welche Spalte durchsucht wird?
Range hier ändern...
 With Worksheets("Lieferanten").Range("B:B") 
Frage 2:
ist es möglich mehrere Spalten gleichzeitig zu durchsuchen? Wenn ja wie?
Range anpassen, z.B.
 With Worksheets("Lieferanten").Range("A:D") 
Frage 3:
ich habe in meiner Tabelle Überschriften... diese werden vom Formular mit übernommen! wie kann ich die
ausschließen?
damit bin ich gescheitert:
> With Worksheets("Lieferanten").Range("A:A").Offset(1, 0)
With Worksheets("Lieferanten").Range("A2:A" & Cells(Rows.Count,1).End(xlUp).Row).
Gruß jodel32
Mitglied: 94451
94451 26.02.2015 um 20:54:03 Uhr
Goto Top
With Worksheets("Lieferanten").Range("A2:A" & Cells(Rows.Count,1).End(xlUp).Row)

das hier funktioniert

erst mal vielen Dank face-smile

... das andere Funktioniert leider nicht wie erhofft...

wenn ich die Range auf B:B ändere, dann sucht er zwar nach der Spalte, aber setzt diese auch ganz vorne hin...
=> das könnte ich aber noch über die Aufteilung ändern!

das Größere Problem ist wenn ich meine Range ändere auf A:D dann erhalte ich hier zu viele Ergebnisse
-> zu deutsch, wenn ich nach * suche, erhalte ich jeden wert 3 mal... zusätzlich werden die werte verschoben (also ich erhalte dann nur die Daten ab B bzw C oder D...)
siehe: http://www.directupload.net/file/d/3910/kyaorksp_png.htm
Mitglied: 114757
114757 26.02.2015 um 23:53:24 Uhr
Goto Top
Ganz einfach, du kannst die Spalte ermitteln in der der Wert gefunden wurde und dementsprechend die Offsets der Spalten dynamisch anpassen.
Die Spalte in der der Wert gefunden wurde erhältst du mit
rngCell.Column
Damit kannst du nun die Offsets verschieben...
Mitglied: 116301
116301 27.02.2015 um 00:27:57 Uhr
Goto Top
Hallo Roadrunner777!

Ergänzend die dynamische Anpassungface-wink

Mit Spalte(B):
With Worksheets("Lieferanten").Range("B2:B" & Cells(Rows.Count, "A").End(xlUp).Row)  
    '.....  
    .List(.ListCount - 1, 0) = rngCell.Offset(0, -1).Value  'Spalte A  
    .List(.ListCount - 1, 1) = rngCell.Offset(0, 0).Value   'Spalte B  
    .List(.ListCount - 1, 2) = rngCell.Offset(0, 1).Value   'Spalte C  
    .List(.ListCount - 1, 3) = rngCell.Offset(0, 2).Value   'Spalte D  
    '.....  
End With
Mit Spalte(A:D):
With Worksheets("Lieferanten").Range("A2:D" & Cells(Rows.Count, "A").End(xlUp).Row)  
    '.....  
    .List(.ListCount - 1, 0) = rngCell.Offset(0, 1 - rngCell.Column).Value  'Spalte A  
    .List(.ListCount - 1, 1) = rngCell.Offset(0, 2 - rngCell.Column).Value  'Spalte B  
    .List(.ListCount - 1, 2) = rngCell.Offset(0, 3 - rngCell.Column).Value  'Spalte C  
    .List(.ListCount - 1, 3) = rngCell.Offset(0, 4 - rngCell.Column).Value  'Spalte D  
    '.....  
End With
Grüße Dieter
Mitglied: 94451
94451 03.03.2015 um 13:36:43 Uhr
Goto Top
Hi,

die Lösung funktioniert gut...

das einzige was jetzt evtl. noch Fehlt, wäre das wenn die Kundennummer und die Telefonnummer ähnliche Passagen haben das der Eintrag zweimal kommt.

oder wenn ich mit * einfach alle anzeigen will, kommt es 4 Fach!

<- kann man eine abfrage machen 'wurde bereits ausgegeben'?

in Spalte A ist eine ID die nicht Doppelt vorkommt!