Adresse/Zeile des ausgewählten ComboBox-Elemtents bestimmen

  • Excel

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von ftzdOp.

    Adresse/Zeile des ausgewählten ComboBox-Elemtents bestimmen

    Hallo Zusammen, ich habe ein VBA-Problem und brauche als "Neuling" mal eure Hilfe.

    Ich habe eine etwas größere Tabelle mit mehreren Daten, die ich mit Hilfe von 3 Comboboxen nach und nach auf gewollte Elemente reduziere:

    Auto -> Reifen -> Neu
    Auto -> Reifen -> Alt
    Auto -> Reifen -> gebraucht
    Motorrad ->Sitz -> groß
    Motorrad -> Sitz -> klein

    Wenn ich Beispiel die Auswahl der kleinen Sitze für Motorrader möchte, wähle ich in der ersten ComboBox Motorrad aus, bekomme in der zweiten nur noch Sitz angezeigt und kann dann zwischen groß und klein entscheiden. DAS FUNKTIONIERT AUCH WUNDERBAR!

    Zwecks Weiterverarbeitung möchte ich jetzt allerdings die Adresse des ausgewählten Elements der 3. Kombobox ausgeben bekommen, damit ich bspw. die Reihennummer kenne und somit weitere Daten in der selben Reihe auslesen möchte. (C 23 zum Beispiel, damit ich aus Zeile 23 alle anderen Daten lesen kann)

    Dazu fehlt mir nur der richtige Code jetzt, könnt ihr mir da vielleicht weiterhelfen?

    Grüße, Mark
    Hey, der Code sieht folgendermaßen aus:

    Visual Basic-Quellcode

    1. Private Sub FillComboBox1()
    2. Call MWFillComboBoxFromTableColumn(Tabelle1, 1, ComboBox1)
    3. If ComboBox1.ListCount >= 1 Then ComboBox1.ListIndex = 0
    4. End Sub
    5. 'Ereignisroutine, wenn sich ComboBox1 verändert -> ComboBox2 und 3 neu füllen
    6. Private Sub ComboBox1_Change()
    7. ComboBox3.Clear
    8. ComboBox2.Clear
    9. If ComboBox1.ListIndex = -1 Then Exit Sub
    10. Call MWFillComboBoxFromTableColumn(Tabelle1, 2, ComboBox2, 1, ComboBox1.Text)
    11. If ComboBox2.ListCount >= 1 Then ComboBox2.ListIndex = 0
    12. End Sub
    13. 'Ereignisroutine, wenn sich ComboBox2 verändert -> ComboBox3 neu füllen
    14. Private Sub ComboBox2_Change()
    15. ComboBox3.Clear
    16. If ComboBox2.ListIndex = -1 Then Exit Sub
    17. Call MWFillComboBoxFromTableColumn(Tabelle1, 3, ComboBox3, 1, ComboBox1.Text, 2, ComboBox2.Text)
    18. If ComboBox3.ListCount >= 1 Then ComboBox3.ListIndex = 0
    19. End Sub
    20. Private Sub MWFillComboBoxFromTableColumn(ByRef oSheet As Object, _
    21. ByVal lColumn As Long, ByRef oComboBox As Object, _
    22. Optional ByVal lColBedingung1 As Long = 0, Optional ByVal sBedingung1 As String = "", _
    23. Optional ByVal lColBedingung2 As Long = 0, Optional ByVal sBedingung2 As String = "")
    24. Dim z As Long
    25. Dim zMax As Long
    26. Dim bFlag As Boolean
    27. oComboBox.Clear
    28. zMax = oSheet.UsedRange.Row + oSheet.UsedRange.Rows.Count - 1
    29. For z = lSTARTZEILE To zMax
    30. If Trim(CStr(oSheet.Cells(z, lColumn).Value)) <> "" Then
    31. bFlag = True
    32. If lColBedingung1 <> 0 Then
    33. If LCase(Trim(CStr(oSheet.Cells(z, lColBedingung1)))) <> LCase(Trim(sBedingung1)) Then
    34. bFlag = False
    35. End If
    36. End If
    37. If lColBedingung2 <> 0 Then
    38. If LCase(Trim(CStr(oSheet.Cells(z, lColBedingung2)))) <> LCase(Trim(sBedingung2)) Then
    39. bFlag = False
    40. End If
    41. End If
    42. If bFlag = True Then
    43. Call MWFillNonDuplicatesToComboBox(oComboBox, oSheet.Cells(z, lColumn).Value)
    44. End If
    45. End If
    46. Next z
    47. End Sub
    48. Private Sub MWFillNonDuplicatesToComboBox(ByRef oComboBox As Object, ByVal sAddText As String)
    49. Dim i As Long
    50. Dim bFlag As Boolean
    51. If oComboBox.ListCount = 0 Then
    52. oComboBox.AddItem sAddText
    53. Else
    54. bFlag = False
    55. For i = 0 To oComboBox.ListCount - 1
    56. If LCase(Trim(CStr(oComboBox.List(i)))) = LCase(Trim(CStr(sAddText))) Then
    57. bFlag = True
    58. Exit For
    59. End If
    60. Next i
    61. If bFlag = False Then
    62. oComboBox.AddItem sAddText
    63. End If
    64. End If
    65. End Sub
    66. Private Sub CommandButton1_Click()
    67. Call FillComboBox1
    68. End Sub


    Danke dir schon einmal für die schnelle Reaktion :)
    Sorry, hört sich flapsig an, ist aber nicht so gemeint.
    Imho ist Excel keine wirklich gute Lösung dafür, ACCESS bietet sich dazu an. Das ist in 5 Minuten ohne Programmierung erledigt. Der Datenimport geht, wenn die Rohdaten halbwegs gut strukturiert sind dann - unabhängig vom Umfang - in 30 Minuten. Dann hast Du gleich eine Mehrbenutzernutzung dazu, falls gewünscht. Ich würde das an Deiner Stelle, aber auf jeden Fall auch für einen einzelnen User, mit ACCESS machen.
    Hilfreiche Antworten als solche zu Kennzeichnen wäre klasse 8-)
    Hey,

    danke erst einmal für den Hinweis, der eigentlich weniger flapsig rübergekommen ist, sondern viel eher informativ. Problem ist nur, dass vorliegende Problem soll primär erst einmal mir Excel gelöst werden, weil danach noch Makros auf PPT zur Datenübergabe zugreifen.

    Also wäre mir erstmal die Lösung in Excel lieber, danach kann ich gerne an Access versuchen!

    Liebe Grüße, Mark
    OK, alles klar.
    Und wo genau ist jetzt Deine Frage/Problem ? (Ich möchte jetzt nicht Dein ganzes Projekt nachbauen.)

    Btw: Du könntest in Excel ganz einfach eine Datenquelle definieren, die das Ergebnis der Abfrage darstellt. Das entsprechende Eingabe/Auswahl-Formular kannst Du mit zwei/drei Codezeilen und einer Referenz auf das ACCESS-Frontend-File auch innerhalb von Excel aufrufen. Dann hast Du Deine Daten jeweils in Excel, aber die eigentlichen Daten sind vernünftig strukturiert in einer Datenbank. IMHO ist Excel einfach nicht wirklich dafür designed Daten zu verwalten. Es ist eine App um Daten zu analysieren.
    Hilfreiche Antworten als solche zu Kennzeichnen wäre klasse 8-)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ftzdOp“ ()

    Mein Problem war, dass ich nicht den Quellcode für das ansteuern des ausgewählten Comboelemets kannte.

    Aber ich habe mittlerweile eine Lösung gefunden, wie ich mir die Zeile des ausgewählten Comboelements anzeigen lassen kann :)

    Visual Basic-Quellcode

    1. Private Sub ComboBox3_Change()
    2. Dim rngZelle As Range
    3. With Worksheets("Tabelle1")
    4. Set rngZelle = .Columns(3).Find(ComboBox3.Value, lookat:=xlWhole)
    5. If Not rngZelle Is Nothing Then
    6. MsgBox rngZelle.Row
    7. Else
    8. MsgBox "Nicht gefunden"
    9. End If
    10. End With
    11. End Sub


    Nichts desto trotz erscheint es mir durchaus sinnvoll, auch einmal sich mit Access auseinander zu setzen, da es laut deiner Aussage ja viel besser der Datenauswertung und zu verwalten im Gegnsatz zu Excel.

    Grüße und danke dir für deine schnelle Reaktion,
    Mark-Phillip
    OK, alles klar. Wie in der PN geschrieben, kann ich Dir bei ACCESS auch helfen. Als Student, der ich jetzt wieder bin, ist so etwas immer willkommen ;)

    BTW: Als Beispiel mal wie das in Excel gemacht hätte, ohne VBA. :thumbup: und PPT kann auch auf Datenquellen wie z.B. Excel zugreifen, eventuell geht das ja ohne oder nur mit minimaler Programmierung.... Ich vermute, das ginge komplett ohne.
    Dateien
    Hilfreiche Antworten als solche zu Kennzeichnen wäre klasse 8-)

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „ftzdOp“ ()