CommandButton mit VBA-Code zuweisen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: CommandButton mit VBA-Code zuweisen
von: Hermann
Geschrieben am: 30.10.2015 19:22:36

Hallo zusammen,
das ersteTabellenblatt in meiner Exceltabelle (mit ca. 100 Tabellenbl.) ist ein Inhaltsverzeichnis mit Hyperlinks zum Aufrufen der einzelnen TabBlätter.
Das TabBlatt „Inhaltsverzeichnis“ wird durch einen VBA-Code erstellt. Kommt ein neues TabBlatt hinzu, rufe ich mit Alt + F8, Makro auswählen, ausführen den Code auf.
Das TabBlatt „Inhaltsverzeichis“ wird gelöscht und wieder neu, mit den akt. TabBlättern erstellt. Ferner wird mir durch den Code ein CommandButton erstellt. Funktioniert super!
Jetzt kommts:
Ich möchte den Code nicht mit Alt + F8 aufrufen, sondern durch das ClickEreignis auf den Button. Dies gelingt mir nicht!!
Wenn ich mit der rechten Maustaste direkt auf den Button klicke und das Makro zuweise, ist es nach 1 mal klicken auf den Button wieder weg, weil das ganze Sheet gelöscht und wieder neu erstellt wird. Hoffentlich benötige ich hierzu kein Klassenmodul.
Vielleicht könnt Ihr mir helfen.
Gruß, Hermann
VBA Teil:
With ActiveSheet.OLEObjects("CommandButton1").Object
.Caption = "Aktualisieren"
.BackColor = Val("&H" & "66FFFF") 'RGB(255,192,0)
.OnAction = "Inhaltsverzeichnis_erstellen"
End With

Bild

Betrifft: AW: CommandButton mit VBA-Code zuweisen
von: Nepumuk
Geschrieben am: 30.10.2015 21:08:28
Hallo,
warum nicht einfach eine Schaltfläche aus den Formularsteuelementen?
Gruß
Nepumuk

Bild

Betrifft: AW: CommandButton mit VBA-Code zuweisen
von: Hermann
Geschrieben am: 30.10.2015 22:23:31
Hallo Nepumuk,
ich dachte das wäre eine Schaltfläche aus den Formularsteuelementen?
Wie müßte ich den Code abändern, das es ein Formularsteuelement wird?
Ich habe mir auch Deine Tipps mit mit dem Klassenmodul durchgelesen.
Frage: Kann ich in das Modul 1 mit
Option Explicit
Option Private Module
Private objCommandButton() As clsCommanbutton
auch den Code packen, der mir mein Inhaltsverzeichnis erstellt ( Normale Sub() )
Gruß, Hermann

Bild

Betrifft: AW: CommandButton mit VBA-Code zuweisen
von: Hermann
Geschrieben am: 30.10.2015 22:23:57
Hallo Nepumuk,
ich dachte das wäre eine Schaltfläche aus den Formularsteuelementen?
Wie müßte ich den Code abändern, das es ein Formularsteuelement wird?
Ich habe mir auch Deine Tipps mit mit dem Klassenmodul durchgelesen.
Frage: Kann ich in das Modul 1 mit
Option Explicit
Option Private Module
Private objCommandButton() As clsCommanbutton
auch den Code packen, der mir mein Inhaltsverzeichnis erstellt ( Normale Sub() )
Gruß, Hermann

Bild

Betrifft: AW: CommandButton mit VBA-Code zuweisen
von: fcs
Geschrieben am: 31.10.2015 01:09:10
Hallo Hermann,
wenn du eine farbige Schaltfläche möchtest, dann muss du ein Rechteck oder eine andere Form als Basis nehen. Die Schaltflächen aus den Formular-Steuerelementen lassen sich nicht färben.
Ob man das Ganze mit Active-X-Schaltfläche und Klassen-Modul gebacken bekommt: ????
Active-X-Elemente in einem Tabellenblatt erwarten ihre Ereignismakros nun mal im Code-Modul des Tabellenblatts.
Mit dem Löschen des Blattes killst du ja auch das Axtive-X-Element mit seinem Makro. Das kommt bei Excel auch nicht so gut an - Makro-Ausführung wird normalerweise abgerochen.
Gruß
Franz
Kann dann wie folgt aussehen:

Sub Inhaltsverzeichnis()
    
    Application.DisplayAlerts = False
    Sheets("Inhaltsverzeichnis").Delete
    Application.DisplayAlerts = True
    Worksheets.Add before:=ActiveWorkbook.Sheets(1)
    
    With ActiveSheet
        .Name = "Inhaltsverzeichnis"
        'Rechteck als Schaltfläche einfügen
        Call fncRechteck_Bunt("Aktualisieren", _
            .Range("B2").Left, .Range("B2").Top, 120, 30, _
            strOnAction:="Inhaltsverzeichnis", _
            lngFillForeColorRGB:=RGB(255, 255, 0), _
            strFontName:="Verdana", intFontSize:=14)
    End With
End Sub
Function fncRechteck_Bunt(ByVal strCaption As String, _
    ByVal dblLeft As Double, ByVal dblTop As Double, _
    ByVal dblWidth As Double, ByVal dblHeight As Double, _
    Optional ByVal strOnAction As String, _
    Optional ByVal lngFillForeColorRGB As Long = 14277081, _
    Optional ByVal strFontName As String = "Arial", _
    Optional ByVal intFontSize As Integer = 12, _
    Optional wks As Worksheet) As Object
'   lngFillForeColorRGB: 14277081  = hellgrau (RGB(217, 217, 217)
'   Rechteck mit Doppelline als Rahmen, schwarzer Schrift (msoShapeStylePreset1)
    Dim objShape As Object
    If wks Is Nothing Then Set wks = ActiveSheet
    'Form einfügen
    Set objShape = wks.Shapes.AddShape(msoShapeRectangle, dblLeft, dblTop, _
            dblWidth, dblHeight)
    Set fncRechteck_Bunt = objShape
    
    With objShape
        .ShapeStyle = msoShapeStylePreset1 'Weiß mit schwarzem Rahmen, schwarzer Shrift
        With .TextFrame2 'Textfeld
            .VerticalAnchor = msoAnchorMiddle
            With .TextRange
                .ParagraphFormat.Alignment = msoAlignCenter
                With .Font
                    .NameComplexScript = strFontName
                    .NameFarEast = strFontName
                    .Name = strFontName
                    .Size = intFontSize
                    .Strikethrough = False
                    .Superscript = False
                    .Subscript = False
                End With
                .Characters.Text = strCaption 'muss nach den Formatierungen eingefügt werden!
            End With
        End With
        With .Fill 'Füllfarbe
            .Visible = msoTrue
            .ForeColor.RGB = lngFillForeColorRGB
            .Transparency = 0
            .Solid
        End With
        With .Line 'Rahmen
            .Visible = msoTrue
            .Weight = 2.25
            .Style = msoLineThinThin
        End With
        .Shadow.Type = msoShadow21 'Schatten rechts-unten
        If strOnAction <> "" Then
            .OnAction = strOnAction
        End If
    End With
End Function


Bild

Betrifft: AW: CommandButton mit VBA-Code zuweisen
von: Hermann
Geschrieben am: 31.10.2015 09:49:45
Hallo Franz,
ich habe die "Call fncRechteck_Bunt" in meinen Code "Inhaltsverzeichnis_erstellen" eingebaut.
Hurra!! Es funktioniert genau so, wie ich es wollte.
Da ich wenig bis sehr wenig VBA-Kenntnisse habe, konnte ich doch den Code der Function lesen und umsetzen. Vielen Dank, für die verständliche Schreibweise.
Beim 2.Teil muß ich leider passen.
Mein Verständnis: Er erstellt mir nur den farbigen Button.
Diesen Code werde ich in einem Übungssheet für mich als Übung bearbeiten und ändern,
und hoffe, daß es mir in 2 Jahren gelingt, so etwas ohne fremde Hilfe selbst zu erstellen.
PS: Warum erscheinen meine Beiträge eigentlcih immer doppelt in der Forumsliste?
Nochmals tausend Dank,
Gruß, Hermann

Bild

Betrifft: AW: CommandButton mit VBA-Code zuweisen
von: Hermann
Geschrieben am: 31.10.2015 09:50:23
Hallo Franz,
ich habe die "Call fncRechteck_Bunt" in meinen Code "Inhaltsverzeichnis_erstellen" eingebaut.
Hurra!! Es funktioniert genau so, wie ich es wollte.
Da ich wenig bis sehr wenig VBA-Kenntnisse habe, konnte ich doch den Code der Function lesen und umsetzen. Vielen Dank, für die verständliche Schreibweise.
Beim 2.Teil muß ich leider passen.
Mein Verständnis: Er erstellt mir nur den farbigen Button.
Diesen Code werde ich in einem Übungssheet für mich als Übung bearbeiten und ändern,
und hoffe, daß es mir in 2 Jahren gelingt, so etwas ohne fremde Hilfe selbst zu erstellen.
PS: Warum erscheinen meine Beiträge eigentlcih immer doppelt in der Forumsliste?
Nochmals tausend Dank,
Gruß, Hermann

Bild

Betrifft: zu oft F5 gedrückt ? ... kwT
von: Matthias L
Geschrieben am: 31.10.2015 10:01:51


 Bild

Beiträge aus den Excel-Beispielen zum Thema "CommandButton mit VBA-Code zuweisen"