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

Printed on: April 19, 2024 at 10:04 o'clock

Mitglied: 114757
114757 Feb 26, 2015 updated at 19:43:50 (UTC)
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 Feb 26, 2015 at 19:54:03 (UTC)
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 Feb 26, 2015 at 22:53:24 (UTC)
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 Feb 26, 2015 at 23:27:57 (UTC)
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 Mar 03, 2015 at 12:36:43 (UTC)
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!