ich hoffe ich habe ein nicht zu triviales Problem, da ich niemanden nerven will.
Ich habe kürzlich herausgefunden dass, man Funktionsaufrufe (Oder Subs) wunderbar dynamisch aufrufen kann.
Nun habe ich eine Userform und würde gerne, wenn ich auf einen Button "Weiter" klicke, will ich je nach Auswahl eine andere Folgeliste anzeigen.
Das funktioniert auch mit .Selection(0), .Selection(1) in einer ellenlangen If Anweisung.
Also will ich es mit der Variable y gerne dynamisch gestalten und damit die Funktionen "Kategorie" & y aufrufen.
Also Application.Run "Kategorie" & y, x
Leider bekomme ich ständig die Fehlermeldung:
"Das Makro 'Kategorie0' kann nicht ausgeführt werden.
Das Makro ist möglicherweise in dieser Arbeitsmappe nicht verfügbar, oder alle Makros wurden deaktiviert.
wenn ich das Sub aber einfach durch Kategorie0, x aufrufe, führt er den Code wie gewünscht aus.
Kann mir jemand dazu einen Rat geben? Ich google schon eine Weite, finde aber nichts sinnvolles. :(
Private Sub Weiter_Click()
If Kategorien.ListIndex = -1 Then
MsgBox ("Du musst etwas auswählen Amigo!")
Else
'Laufvariable für Erfassung Typ
Dim x As Integer
x = 1
'Variable für Selected
Dim y As Integer
y = 0
Do While Not IsEmpty(Worksheets(1).Cells(x, 1))
x = x + 1
Loop
'Fülle Liste mit Typen
y = Kaufmenue.Kategorien.ListIndex
MsgBox (y)
'Kategorie0 x
Application.Run "Kategorie" & y, x
End If
End Sub
Private Sub UserForm_Initialize()
Kategorien.ColumnHeads = True
Kategorien.RowSource = "Liste!AC2:AC10"
End Sub
Private Sub Zurück_Click()
Kategorien.Clear
Kategorien.ColumnHeads = True
Kategorien.RowSource = ""
Kategorien.RowSource = "Liste!AC2:AC10"
End Sub
Sub Kategorie0(ByVal x As Integer)
Kaufmenue.Kategorien.ColumnHeads = False
Dim str1 As String
Kaufmenue.Kategorien.RowSource = ""
For i = 2 To x
If Worksheets(1).Cells(i, 1) = Worksheets(1).Cells(2, 29) Then
str1 = Worksheets(1).Cells(i, 3).Value
With Kaufmenue.Kategorien
.AddItem str1
End With
End If
Next
End Sub
Sub Kategorie1(ByVal x As Integer)
Kaufmenue.Kategorien.ColumnHeads = False
Dim str1 As String
Kaufmenue.Kategorien.RowSource = ""
For i = 2 To x
If Worksheets(1).Cells(i, 1) = Worksheets(1).Cells(3, 29) Then
str1 = Worksheets(1).Cells(i, 3).Value
With Kaufmenue.Kategorien
.AddItem str1
End With
End If
Next
End Sub
Sub Kategorie2(ByVal x As Integer)
Kaufmenue.Kategorien.ColumnHeads = False
Dim str1 As String
Kaufmenue.Kategorien.RowSource = ""
For i = 2 To x
If Worksheets(1).Cells(i, 1) = Worksheets(1).Cells(3, 29) Then
str1 = Worksheets(1).Cells(i, 3).Value
With Kaufmenue.Kategorien
.AddItem str1
End With
End If
Next
End Sub