Vielleicht versuche ich es nochmal anders zu beschreiben:
Am Ende soll man auf einen der Buttons klicken können und wechselt auf das entsprechendes Tabellenblatt.
Dabei heißt das Tabellenblatt = der Caption des Buttons = dem Eintrag (Text) in der Zelle.
Da die Einträge in den Zellen durch vorgelagerte Schritte immer anders sind (aus einer definierten Auswahl von insgesamt 15 Stück), muss jedem Makro (welches das Tabellenblatt wechselt) ja quasi der "Parameter" der Zelle weitergegeben werden. Damit am Ende mit klicken auf den "1.Button" das sheet mit dem Namen des 1. Listeneintrages angezeigt wird. Das gleiche für den 2.Button und den 2.Listeneintrag usw.
Mit "Application.Caller" kenne ich mich leider noch gar nicht aus.
Vielleicht lässt sich das Ganze ja auch auf einem anderen Weg lösen?
Danke im Voraus!
Durch tschurl's Hilfe angepasster Code:
Sub generate_Buttons()
'define table for buttons
Set Sheet = ThisWorkbook.Worksheets("Sheet3")
'start values für references --> Cells(row,column)
Dim column As Variant
Dim row As Variant
'set secure values
column = 1 'Refferenz zu den (zu übernehmenden) Zellen
row = 2
'set raw button data
'Dim Button As Variant
Dim NewButton As Object
Dim buttonHigh As Integer
Dim buttonWidth As Integer
Dim actualX As Integer
Dim actualY As Integer
buttonStart = 10 'Abstand zum oberen Rand (des ersten Buttons)
buttonSpacing = 10 'Abstand zum nächsten Button
buttonHigh = 20
buttonWidth = 200
actualX = 150 'Abstand zum linken Rand
actualY = buttonStart
' process last valued cell
lastRow = Sheet.Cells.SpecialCells(xlCellTypeLastCell).row
'error exception for empty table
If lastRow = Emtpy Then
'bricht aktuelle Sub ab
Else
For actualRow = row To lastRow
'generate a new button
Set NewButton = Sheet.Buttons.Add(actualX, actualY, buttonWidth, buttonHigh)
NewButton.Caption = Sheet.Cells(actualRow, column).Value
NewButton.Font.Bold = True
NewButton.OnAction = "Zu_Blatt_XY_wechseln"
'prepare for next generated button
actualY = actualY + buttonHigh + buttonSpacing
Next
End If
End Sub
Sub Zu_Blatt_XY_wechseln()
Debug.Print Application.Caller
Dim strString As String
strString = CStr(Application.Caller)
Sheets(strString).Select
End Sub
|