Thema Datum  Von Nutzer Rating
Antwort
13.04.2023 08:50:06 Julaka
Solved
13.04.2023 12:34:07 Ulrich
NotSolved
13.04.2023 13:32:28 Gast79500
NotSolved
13.04.2023 21:50:11 xlKing
NotSolved
19.04.2023 13:29:27 Gast79500
NotSolved
21.04.2023 21:21:12 xlKing
NotSolved
23.04.2023 13:37:50 Gast79500
NotSolved
Blau ToolTipText
24.04.2023 00:36:40 xlKing
NotSolved
25.04.2023 01:22:27 Gast79500
NotSolved
25.04.2023 19:09:57 xlKing
NotSolved
26.04.2023 16:23:30 sauber....;-)....
NotSolved
13.04.2023 22:36:52 volti
Solved
14.04.2023 11:39:22 Julaka
NotSolved
14.04.2023 11:50:10 volti
Solved
14.04.2023 14:29:39 Julaka
NotSolved
14.04.2023 17:59:56 volti
Solved
17.04.2023 11:24:58 Julaka
Solved
21.04.2023 08:01:45 Julaka
NotSolved
21.04.2023 09:20:28 volti
NotSolved

Ansicht des Beitrags:
Von:
xlKing
Datum:
24.04.2023 00:36:40
Views:
302
Rating: Antwort:
  Ja
Thema:
ToolTipText

Hallo nochmal,

zu "die Buttons brauchst ja nicht zur Laufzeit hinzufügen" - Leider doch. Wenn ich sie in Excel 2019 manuell im Entwurfsmodus hinzufüge, werden sie im Blatt erstellt und nicht im Frame. Egal ob ich zuvor das Frame markiere oder nicht. Beide Shapes lassen sich dann unabhängig voneinander verschieben. Deshalb der Umwandel-Code.

Habe diesen nochmals minimal überarbeitet und das Problem mit dem Entwurfsmodus gelöst. Einfach im Code die Visible-Eigenschaft vom Frame auf False und wieder True setzen. Damit wird dieses neu gezeichnet und der Button wird klickbar, ohne dass der Entwurfsmodus aktiviert werden muss. Das Makro Zuweisen muss also nicht mehr extra ausgeführt werden, sondern nur wenn die Arbeitsmappe neu geöffnet wird oder zusätzliche Buttons hinzugefügt werden.

tooltips ist jetzt ein Array und muss soviele Einträge enthalten wie Buttons auf dem Blatt verfügbar sind. Ansonsten wie gehabt.

Code für Modul1

Option Explicit
Dim coll As New Collection
Sub Umwandeln()
  Dim shp As Shape, tooltips()
  Dim t As Single, l As Single, w As Single, h As Single, c As String, n As String, i As Long
  tooltips = Array("Beschreibung 1", "Beschreibung 2", "Beschreibung 3")
  Dim cb1 As MSForms.CommandButton
  Dim ax As axButton
  
  
  For Each shp In ActiveSheet.Shapes
    If shp.Type = msoOLEControlObject Then
      If shp.OLEFormat.progID = "Forms.CommandButton.1" Then
        With shp
          t = .Top
          l = .Left
          w = .Width
          h = .Height
          c = .OLEFormat.Object.Object.Caption
          n = .Name
          .Delete
        End With
        With ActiveSheet.Shapes.AddOLEObject("Forms.Frame.1", Left:=l, Top:=t, Width:=w, Height:=h)
          i = i + 1
          With .OLEFormat.Object.Object
            .Caption = ""
            .BorderStyle = 1
            .BorderStyle = 0
            Set cb1 = .Controls.Add("Forms.CommandButton.1", n)
            With cb1
              .Width = w
              .Height = h
              .Caption = c
              .ControlTipText = tooltips(i - 1)
            End With
            coll.Add New axButton
            Set ax = coll(coll.Count)
            Set ax.cb = cb1
          End With
          .Visible = False
          .Visible = True
        End With
      End If
    End If
  Next shp
  
End Sub

Sub Zuweisen()
  Dim shp As Shape, btn As MSForms.CommandButton, ax As axButton
  Set coll = Nothing
  For Each shp In ActiveSheet.Shapes
    If shp.Type = msoOLEControlObject Then
      If shp.OLEFormat.progID = "Forms.Frame.1" Then
        For Each btn In shp.OLEFormat.Object.Object.Controls
          coll.Add New axButton
          Set ax = coll(coll.Count)
          Set ax.cb = btn
        Next btn
      End If
    End If
  Next shp
End Sub

Code für ein Klassenmodul namens axButton

Public WithEvents cb As MSForms.CommandButton

Private Sub cb_Click()
  MsgBox cb.Name & " wurde geklickt"
End Sub

Code für Modul "DieseArbeitsmappe"

Private Sub Workbook_Open()
  Call Zuweisen
End Sub

Gruß Mr. K.


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
13.04.2023 08:50:06 Julaka
Solved
13.04.2023 12:34:07 Ulrich
NotSolved
13.04.2023 13:32:28 Gast79500
NotSolved
13.04.2023 21:50:11 xlKing
NotSolved
19.04.2023 13:29:27 Gast79500
NotSolved
21.04.2023 21:21:12 xlKing
NotSolved
23.04.2023 13:37:50 Gast79500
NotSolved
Blau ToolTipText
24.04.2023 00:36:40 xlKing
NotSolved
25.04.2023 01:22:27 Gast79500
NotSolved
25.04.2023 19:09:57 xlKing
NotSolved
26.04.2023 16:23:30 sauber....;-)....
NotSolved
13.04.2023 22:36:52 volti
Solved
14.04.2023 11:39:22 Julaka
NotSolved
14.04.2023 11:50:10 volti
Solved
14.04.2023 14:29:39 Julaka
NotSolved
14.04.2023 17:59:56 volti
Solved
17.04.2023 11:24:58 Julaka
Solved
21.04.2023 08:01:45 Julaka
NotSolved
21.04.2023 09:20:28 volti
NotSolved