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
Blau ToolTipText
21.04.2023 21:21:12 xlKing
NotSolved
23.04.2023 13:37:50 Gast79500
NotSolved
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:
21.04.2023 21:21:12
Views:
462
Rating: Antwort:
  Ja
Thema:
ToolTipText

Hallo Gast 79500

Du hast vermutlich "Das klappt sonst immer" überlesen. Ich arbeite seit 15 Jahren mit Klassenprogrammierung und bin da schon relativ fit. Ich hatte ein Makro geschrieben, das einen ActiveX Button ohne Frame in einen mit Frame umwandelt. Das funktioniert soweit prima. Du hast dennoch recht mit "Irgendwas machst du noch falsch": Das Problem war, dass der neue Button grafisch nicht klickbar ist. Dazu muss erst nochmals der Entwurfsmodus aktiviert und wieder beendet werden. Das wiederum führt aber dazu, dass das Projekt und sämtliche Variablen zurückgesetzt werden und die Public WithEvents Eigenschaft, somit ebenfalls ihren Wert verliert. Das war mir vorher noch nicht bewusst. Der Code "Umwandeln" allein funzt deshalb leier nicht. Mit einem zweiten Code klappt es aber nun perfekt, danke für den Denkanstoss.

Wen es interessiert hier der Weg: Legt einen oder mehrere ActiveX-Buttons an, führt das Makro Umwandeln aus, aktiviert und deaktiviert den Entwurfsmodus, Führt dann das Makro Zuweisen aus, ggf. über ein Workbook_Open Ereignis.

Code für Modul1:

Option Explicit
Dim coll As New Collection
Sub Umwandeln()
  Dim shp As Shape, tooltip As String
  Dim t As Single, l As Single, w As Single, h As Single, c As String, n As String
  tooltip = "Test"
  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).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 = tooltip
            End With
            coll.Add New axButton
            Set ax = coll(coll.Count)
            Set ax.cb = cb1
        End With
      End If
    End If
  Next shp
  
  
End Sub

Sub Zuweisen()
  Dim shp As Shape, btn As MSForms.CommandButton, ax As axButton
  
  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 names axButton

Public WithEvents cb As MSForms.CommandButton

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

Code im 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
Blau ToolTipText
21.04.2023 21:21:12 xlKing
NotSolved
23.04.2023 13:37:50 Gast79500
NotSolved
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