vba - wenn combobox 1 Auflistung über verschiedene Arbeitsblätter gefiltert wurde - dann Auswahl in Combobox 2 nur Filterauswahl des gewählten Arbeitsblattes ?

  • Excel

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

    vba - wenn combobox 1 Auflistung über verschiedene Arbeitsblätter gefiltert wurde - dann Auswahl in Combobox 2 nur Filterauswahl des gewählten Arbeitsblattes ?

    Hallö,

    hoffe auf Eure Hilfe :wacko:

    Komme einfach nicht weiter und finde hier und im Netz irgendwie nicht die passende Lösung.

    Dazu muss ich sagen, dass ich ein absoluter Anfänger im VBA bin aber nun schon Tage hieran rumtüftel - lese - usw. *heul*

    Kann mir jemand helfen :?: Wäre echt toll :S

    Wie baut man im unteren VBA Code es so um, dass

    wenn im Combobox Auswahlfeld (Typ) z.B Typ-2 gewählt wurde,
    dann im Combobox Auswahlfeld (Variante) nur dies als Auswahlliste zum auswählen erscheint was im Blatt Typ-2 drin ist?

    Also, wenn combobox Typ (=Auflistung der Arbeitsblätter) die Auflistung gefiltert wurde
    - dann soll in Combobox Variante nur die Daten des gewählten Arbeitsblattes aufgelistet werden?

    Falls die Datei benötigt wird stelle ich sie sofort zur Verfügung. :love:

    LG

    Knibbli


    Visual Basic-Quellcode

    1. Private Sub Variante_Change()
    2. Filtern
    3. End Sub
    4. Private Sub Typ_Change()
    5. Filtern
    6. End Sub
    7. Private Sub Worksheet_Activate()
    8. Variante_befüllen
    9. Typ_befüllen
    10. End Sub
    11. Public Sub Variante_befüllen()
    12. Dim a As Range
    13. Dim i As Integer
    14. Dim WS As Worksheet
    15. With ThisWorkbook.Sheets("Auswertung").Variante
    16. .Clear
    17. For Each WS In ThisWorkbook.Worksheets
    18. If WS.Name = "Typ-1" Or WS.Name = "Typ-2" Or WS.Name = "Typ-3" Or WS.Name = "Typ-4" Or WS.Name = "Typ-5" Then
    19. For Each a In WS.Range("A3:A1000")
    20. If a <> "" Then
    21. For i = 0 To .ListCount - 1
    22. If InStr(1, .List(i), a, 1) <> 0 Then GoTo Weiter
    23. Next i
    24. .AddItem a
    25. End If
    26. Weiter:
    27. Next a
    28. End If
    29. Next WS
    30. End With
    31. End Sub
    32. Public Sub Typ_befüllen()
    33. Dim i As Integer
    34. Dim WS As Worksheet
    35. With ThisWorkbook.Sheets("Auswertung").Typ
    36. .Clear
    37. For Each WS In ThisWorkbook.Worksheets
    38. If WS.Name = "Typ-1" Or WS.Name = "Typ-2" Or WS.Name = "Typ-3" Or WS.Name = "Typ-4" Or WS.Name = "Typ-5" Then
    39. For i = 0 To .ListCount - 1
    40. If InStr(1, .List(i), WS.Name, 1) <> 0 Then GoTo Weiter
    41. Next i
    42. .AddItem WS.Name
    43. End If
    44. Weiter:
    45. Next WS
    46. End With
    47. End Sub
    48. Public Sub Filtern()
    49. Dim a As Range
    50. Dim b As Range
    51. Dim Typ As String
    52. Dim zeile As Integer
    53. Dim WS As Worksheet
    54. zeile = 2
    55. With ThisWorkbook.Sheets("Auswertung")
    56. .Range("A2:I1000").ClearContents
    57. If .Variante = "" Or .Typ = "" Then Exit Sub
    58. Typ = .Typ
    59. Set WS = ThisWorkbook.Sheets(Typ)
    60. For Each a In WS.Range("A3:A1000")
    61. If a <> "" And InStr(1, .Variante, a, 1) <> 0 Then
    62. For Each b In .Range("B2:B1000")
    63. If b <> "" And InStr(1, b, a.Offset(0, 2), 1) <> 0 Then
    64. .Cells(zeile - 1, 4) = .Cells(zeile - 1, 4) + a.Offset(0, 4)
    65. .Cells(zeile - 1, 5) = .Cells(zeile - 1, 5) + a.Offset(0, 5)
    66. GoTo Weiter
    67. End If
    68. Next b
    69. .Cells(zeile, 1) = a.Offset(0, 27)
    70. .Cells(zeile, 2) = a
    71. .Cells(zeile, 3) = a.Offset(0, 1)
    72. .Cells(zeile, 4) = a.Offset(0, 2)
    73. .Cells(zeile, 5) = a.Offset(0, 3)
    74. .Cells(zeile, 6) = a.Offset(0, 4)
    75. .Cells(zeile, 7) = a.Offset(0, 5)
    76. .Cells(zeile, 8) = a.Offset(0, 26)
    77. .Cells(zeile, 9) = a.Offset(0, 6)
    78. zeile = zeile + 1
    79. End If
    80. Weiter:
    81. Next a
    82. End With
    83. End Sub
    84. Sub Druck_Click()
    85. Sheets("Auswertung").PrintOut
    86. End Sub
    Ist die ComboBox auf dem Tabellenblatt oder in einer UserForm?
    Was hast Du denn mit dieser Abfrage vor:
    If WS.Name = "Typ-1" Or WS.Name = "Typ-2" Or WS.Name = "Typ-3" Or WS.Name = "Typ-4" Or WS.Name = "Typ-5" Then

    Ich denke, Du willst nur die Werte eines Arbeitsblattes auswerten. Dann Musst Du auch nur dieses eine Tabellenblatt benutzen.

    Was Du mit dem Filten vor hast hat sich mir nicht so ganz erschlossen. Aber bevor Du mit der Programmierung von Excel anfängst, solltest Du Dir vielleicht erst einaml anschauen, was Excel so schon an eingbauten Möglichkeiten mitbringt. Gültigtkeit für die Auswahl, Spezialfilter für das Filtern etc.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Hallö,

    Danke für deine Antwort.

    So wie ich bereits schrieb, muss ich Anfangs - mehrere Blätter gleichzeitig zur Auswahl aulisten- nicht nur eines.


    Später muss ich noch eine 3. Combobox haben, wobei dann damit mit der
    2. Auflistung und dieser späteren 3. Auflistung im Bezug auf die 1. Auflistung mindestens zwei Datenblätter ausgewertet werden müssen.


    Wenn ich es aber noch nicht mal schaffe im Bezug auf die1. Auflistung per VBA die 2. Auflistung - filterung im index festzulegen,
    dann kann ich das mit der 3. Filterung gleich ganz vergessen.
    ?(


    Mit Excel selbst, kenne ich mich ganz gut aus......

    Es geht mir allerdings nun darum, alles bisherige, was ich in Formeln geschrieben hatte, in VBA zu bekommen
    da das Blatt "Auswertung" (automatisiert) - immer wieder aktualisiert - gelöscht und neu überschrieben werden muss

    .... und dies so einfach wie möglich für den Anwender.

    Die Datei selbst ist leider nicht besonders ordentlich aufgebaut und wird nicht verändert werden (außer Werte-Inhalte und neue Tabellenblätter),
    daher muss ich mich an dem Gegebenen anpassen und daraus das Optimalste zum Auswerten rausholen.

    Kann mir jemand sagen wie ich die Comboboxfilterung in VBA Variante so umschreibe, dass nur das aufgelistet wird was mit der Typfilterung die Spalte dieses TypBlatts ausgewählt wurde?

    Ich stelle mal die Datei mit ein, ... ist aber schon etwas mehr ausgearbeitet als gestern am Anfang angegeben.

    Ihr könnt Euch gerne auch die anderen noch nicht umgebauten Formeln ansehen, wie man diese in den VBA Code noch rein bekommt.
    :love:

    Liebe Grüße

    Knibbli
    Dateien
    Warum liest Du denn jedes mal alle ein?

    Denn Typ musst Du nur am Anfang einmal einlesen.
    Nach dem der Typ gewählt wurde, musst Du dann nur noch die Varianten des entsprechenden Blattes einlesen.
    Was ist an dieser Logik so schwer?
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Was ist an dieser Änderung so schwer:

    Visual Basic-Quellcode

    1. Public Sub Variante_befüllen()
    2. Dim a As Range
    3. Dim i As Integer
    4. Dim WS As Worksheet
    5. With ThisWorkbook.Sheets("Auswertung").Variante
    6. .Clear
    7. WS=ThisWorkbook.Sheets(ThisWorkbook.Sheets("Auswertung").Typ.Text)
    8. For Each a In WS.Range("A3:A1000")
    9. If a <> "" Then
    10. For i = 0 To .ListCount - 1
    11. If InStr(1, .List(i), a, 1) <> 0 Then Exit For
    12. Next i
    13. .AddItem a
    14. End If
    15. Next a
    16. End If
    17. End Sub
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Hallö;

    Danke noch mal für deine Mühe und deine Antwort aber

    das genau macht mir eine Fehlermeldung. Das funktioniert nicht.

    Ich muss es irgendwie so umschreiben dass er auf den Auswahlindex der Combobox 1 Zugreift. Oder täusche ich mich da.

    Als VBA Neuling finde ich das irgendwie nicht raus.


    Lieb Grüße

    Knibbli
    Versuchs dami:

    Visual Basic-Quellcode

    1. Private Sub Typ_Change()
    2. Filtern
    3. If ThisWorkbook.Sheets("Auswertung").Typ.Value <> "" Then
    4. Variante_befüllen
    5. End If
    6. End Sub
    7. Public Sub Variante_befüllen()
    8. Dim a As Range
    9. Dim i As Integer
    10. Dim WS As New Worksheet
    11. With ThisWorkbook.Sheets("Auswertung").Variante
    12. .Clear
    13. Set WS = Worksheets(ThisWorkbook.Sheets("Auswertung").Typ.Value)
    14. For Each a In WS.Range("A3:A1000")
    15. If a <> "" Then
    16. For i = 0 To .ListCount - 1
    17. If InStr(1, .List(i), a, 1) <> 0 Then Exit For
    18. Next i
    19. .AddItem a
    20. End If
    21. Next a
    22. End With
    23. End Sub

    Ich habe mal wieder VBA mit .Net verwechselt. ".Text <> .Value"

    PS Die Fehlermeldungen solltest Du mit angeben.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).