Clever-Excel-Forum

Normale Version: Finde den Fehler nicht!!! ;(
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebes Excelforum,


bin seit ein paar Stunden am verzweifeln denn ich finde den Fehler nicht ;(

Mit diesem Code filtere ich meine Tabelle nach bestimmten Werten die ich über eine Userform eingebe und auf Filtern(CommandButton1_Click) klicke:

Code:
Option Explicit
Private Sub CommandButton1_Click()
'    filtern
    Dim loletzte As Long
    Dim i As Integer, j As Integer
    With Sheets("Filter")
        .Cells.Clear
        j = 1
        For i = 1 To 58
            If Me.Controls("Textbox" & i) <> "" Then
                .Cells(1, j) = Me.Controls("Label" & i).Caption
                If IsNumeric(Me.Controls("Textbox" & i)) Then
                    If i = 30 Or i = 31 Or i = 32 Or i = 34 Or i = 52 Or i = 53 Or i = 54 Or i = 55 Then
                        If Me.Controls("ComboBox" & i) <> "" Then
                            .Cells(2, j) = Me.Controls("ComboBox" & i) & Replace(Me.Controls("Textbox" & i), ",", ".")
                            j = j + 1
                        Else
                            .Cells(2, j) = CDbl(Me.Controls("Textbox" & i))
                            j = j + 1
                        End If
                    Else
                        .Cells(2, j) = CDbl(Me.Controls("Textbox" & i))
                        j = j + 1
                    End If
                Else
                    .Cells(2, j) = "*" & Me.Controls("Textbox" & i).Text & "*"
                    j = j + 1
                End If
            End If
        Next i
        If j > 1 Then
            Sheets("produkte").Rows(1).Copy .Range("A4")
            Sheets("produkte").Range("C1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=.Range(.Cells(1, 1), .Cells(2, j - 1)), CopyToRange:=.Range(.Cells(4, 1), .Cells(4, 58)), Unique:=False
            
            loletzte = .Cells(Rows.Count, 3).End(xlUp).Row
            If loletzte <= 4 Then
                Me.ListBox2.RowSource = ""
                MsgBox "Keine Suchergebnisse!" & vbLf & vbLf _
                    & "Eingabe überprüfen oder andere Optionen für die Suche wählen."
            Else
                Me.ListBox2.RowSource = ""
                Me.ListBox2.ColumnCount = 58
                Me.ListBox2.ColumnHeads = True
                Me.ListBox2.RowSource = "Filter!" & .Range(.Cells(5, 1), .Cells(loletzte, 58)).Address
            End If
        Else
            MsgBox "Keine Filterkriterien angegeben!"
        End If
    End With
End Sub


Es werden z.B mehrere Einträge gefunden und beim Doppelklick auf einer bestimmten Zeile in der Listbox soll die Artikelnummer die sich in der Listbox in der 3. Spalte und auch im Tabellenblatt in Spalte C befindet an den "sSearch" im nächsten Code übergeben werden:


Code:
Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim i As Long
    Dim sSearch As String
    Dim rngID As Range
    sSearch = Me.ListBox2  'Eintrag an die Variable übergeben
    Set rngID = ThisWorkbook.Sheets("produkte").Columns("C:C").Find(What:=sSearch, LookAt:=xlWhole, LookIn:=xlValues) 'In Spalte A nach dem Wert in der Variable suchen und festhalten
    i = rngID.Row
  
       frmArtSuch.Hide
       ArtikelDB.Show
       With ThisWorkbook.Sheets("produkte")
       ArtikelDB.TextBox3.Text = .Cells(i, 3).Value
       End With
       ArtikelDB.cmdArtikelSuchen_Click
End Sub


Nun klappt es wunderbar solange die Artikelnummer in der Spalte A steht dann wird an den sSearch die Artikelnummer aus der Spalte A übergeben aber ich möchte das die Artikelnummer aus der Spalte C übergeben wird!


Hat jemand eine Idee?


Vielen Dank
VG
Alexandra
Hallo,

wenn die Artikelnummer eine Zahl ist, wirst Du nie was finden, denn die Textbox gibt, wie der Name schon sagt, einen Text zurück.
Da ich weder Deine Tabelle noch sonst was kenne, hier mal ein ungetesteter Vorschlag:

Code:
Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim i As Long
    Dim sSearch As Double
    Dim rngID As Range
    sSearch = cdbl(Me.ListBox2)  'Eintrag an die Variable übergeben
    Set rngID = ThisWorkbook.Sheets("produkte").Columns("C:C").Find(What:=sSearch, LookAt:=xlWhole, LookIn:=xlValues) 'In Spalte C nach dem Wert in der Variable suchen und festhalten
    i = rngID.Row
  
       frmArtSuch.Hide
       ArtikelDB.Show
       With ThisWorkbook.Sheets("produkte")
       ArtikelDB.TextBox3.Text = .Cells(i, 3).Value
       End With
       ArtikelDB.cmdArtikelSuchen_Click
End Sub
Hallo zusammen

Edgar, Alexandra schreibt, dass sie den Wert aus der dritten Spalte einer Listbox an die
Variable übergeben möchte. Also, keine Textbox, aber hier ist auch der Denkfehler.

Mit sSearch = Me.ListBox2 wird der Wert aus der ersten Spalte der Listbox wiedergegeben.
Den Wert aus der dritten Spalte erhält man so:

ListBox2.List(ListBox2.ListIndex, 2)

Also:
sSearch =ListBox2.List(ListBox2.ListIndex, 2)

Da der Filtercode wahrscheinlich aus einer meiner Beispielmappen ist, gehe ich davon aus, dass
hier eine mehrspaltige und auch so eingestellte Listbox vorliegt.
Hallo Atilla,


vielen Dank so funktioniert es auch:

sSearch = Me.ListBox2.Column(2)

:19:

Schönen Abend noch
LG
Alexandra