Clever-Excel-Forum

Normale Version: Userform Mehre Tabelle ansprechen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Tag Community,

Hintergrund:
1x Userform,
2x ComboBox
2x TextBox,
2 Tabellen (Tabelle1 & Tabelle3)

Ich habe versucht, 2 x Combox voneinander getrette Tabellen anzusprechen,
ohne erfolg.

1 set klappt ohne Probleme:
1xComboBox1
1xTextBox1
1xTabelle1
END
Code:
Private Sub UserForm_Initialize()
With Worksheets("Tabelle1")
    Me.ComboBox1.Clear
    Me.ComboBox1.List = .Range("C2:C" & .Cells(Rows.Count, 2).End(xlUp).Row).Value
End With
End Sub

Private Sub ComboBox1_Change()
  With Me
    TextBox1 = Cells(ComboBox1.ListIndex + 2, 2)
  End With
End Sub


2 set klappt nicht:
1xComboBox3
1xTextBox3
1xTabelle3
Code:
Private Sub UserForm_Initialize()
With Worksheets("Tabelle1")
    Me.ComboBox1.Clear
    Me.ComboBox1.List = .Range("C2:C" & .Cells(Rows.Count, 2).End(xlUp).Row).Value
End With

With Worksheets("Tabelle3")
    Me.ComboBox3.Clear
    Me.ComboBox3.List = .Range("C2:C" & .Cells(Rows.Count, 2).End(xlUp).Row).Value
End With

End Sub

Private Sub ComboBox1_Change()
  With Me
    TextBox1 = Cells(ComboBox1.ListIndex + 2, 2)
  End With
End Sub

Private Sub ComboBox3_Change()
  With Me
    TextBox3 = Cells(ComboBox3.ListIndex + 2, 2)
  End With
End Sub

Beim Ausführen, von ComboBox3,

gibt er in TextBox3 das ergbnix aus Tabelle1, er soll aber aus Tabelle3

Kann mir einer etwas weiter helfen?
Gruß
Hallo,

Code:
Private Sub ComboBox1_Change()
  With Worksheets("Tabelle1")
    TextBox1 = .Cells(ComboBox1.ListIndex + 2, 2)
  End With
End Sub

Private Sub ComboBox3_Change()
  With Worksheets("Tabelle3")
    TextBox3 = .Cells(ComboBox3.ListIndex + 2, 2)
  End With
End Sub

Gruß Uwe
Hallo Guten Morgen Kuwer,

danke für den Code bzw den Tipp.
Klappte sofort...

Gruß
PS: bin noch am Lernen von VBA
Guten Abend,

danke nochmal für deine Hilfe.

Mir ist aber leider ein Fehler aufgefallen.
Immer wenn ich einen Neuen oder bestehende Eintrag Speichern will,
löscht er den Eintrag von ComboBox203, und somit zeit er im Textbox202 "ID" an,
was aus der Tabelle 1 Zeile1 ist, was gar nicht defeniert wurden ist.
Er würfte nur ab zeile 2 was anzeigen.

Hier mein Code, etwas angeändert, damit er bei mir Funkzoniert.

Code:
  Private Sub ComboBox203_Change()
  With Tabelle1
    TextBox202 = .Cells(ComboBox203.ListIndex + 2, 2)
  End With
End Sub

Kannst du mir vielleicht sagen, wo der fehler liegen kann?

Gruß
Guten Morgen,

bis jetzt habe ich den oben genanten Fehler nicht wegbekommen.
Ich lege eine Testdatei mit dabei.

Ich hoffe einer kann mir weiter helfen!!!

Gruß
Hallo community,

habe eine andere möglichkeit gefunden bzw. angewendet, damit beim Speichern in der comboBox der Wert nicht gelöscht wirt.

Hier meine Lösungsweg.

Code:
Option Explicit
Dim key1 As Variant  'Kunde
Dim key2 As Variant  'Kunde|Kn ID

Private Sub UserForm_Activate()
    Dim dict As Object, arr As Variant
    Dim lZeile As Long
           
       ' Tabelle 1 "Kunde", Daten in Array einlesen
    With Tabelle1
        lZeile = .Cells(Rows.Count, 2).End(xlUp).Row
        arr = .Range(.Cells(2, 1), .Cells(lZeile, 9)).Value '9 sind die anzahl der Spalten wo er sucht, und muss gesetzt werden.
    End With
   
    ' call Function für ComboBox1..2
    Set dict = CreateObject("Scripting.Dictionary")
    key1 = Set_Keys(dict, arr, 3, -1) 'Kn ID
    key2 = Set_Keys(dict, arr, 3, 2) 'Kunde
  '#####################################################

    Set dict = Nothing
   
    Me.ComboBox203.List = key1 ' Auswahlliste "Kunde"
  End Sub
 


  'Change "Fraktion", neue Items für "Kunde"
Private Sub ComboBox203_Change()
  With Tabelle1
    TextBox202.Text = .Cells(ComboBox203.ListIndex + 2, 2).Value
  End With
End Sub

Private Function Set_Keys(dict As Object, arr As Variant, _
                          sp1 As Integer, sp2 As Integer) As Variant
    Dim wert As String
    Dim i As Integer
    ' Keys in Dictionary eintragen...
    For i = 1 To UBound(arr, 1)
        wert = arr(i, sp1)
        If sp2 <> -1 Then wert = wert & "|" & arr(i, sp2)
        dict(wert) = 0
    Next i
    ' an aufrufende Sub zurückgeben
    Set_Keys = dict.keys
    ' Keys aus Dictionary löschen
    dict.RemoveAll
End Function

Gruß