|
Hallo Diana,
klar, kann nicht funkionieren. Du rufst momentan in beiden Fällen mit New ein neues clsCommandBarButton-Objekt auf. Soweit so richtig, aber in diesem Objekt hast du dem Click-Ereignis "nur" die Msgbox hinterlegt. Außerdem überschreibst du clsBT mal mit der Methode für die MsgBox und mal mit der für den Text. Ja, was denn nun? Außerdem (und da kannst du nix dafür) wird das Projekt bei bestimmten Codeänderungen zurückgesetzt und alle Variablen verlieren dabei ihren Wert. Also musst du für die mehrfache Verwendung die Event-Verknüpfung neu setzen.
Wenn du mehrere Buttons willst, brauchst du also verschiedene Variablen, da jedes clsCommandbarbutton-Objekt ein anderes ist. Bei 2 oder mehr Buttons empfielt es sich, diese in einem Collection-Objekt zu sammeln:
Leider kenne ich keine Möglichkeit, die Position der Einfügemarke auszulesen. Ein Selection-Objekt gibt es im Codefenster des VB-Editors nicht. Vielleicht kennt ja jemand eine API-Lösung? Auf die schnelle hab ich da nix gefunden. Du musst dich also entscheiden, wo du den Text einfügst und diesen dann von dort an die gewünschte Stelle im Modul kopieren. In meinem Beispiel wird der Text vor der letzten Zeile eingefügt.
in ein allgemeines Modul (Modul1)
Dim cbbtnColl As New Collection
Sub ButtonAnlegen() 'ggf. nur Einmalig ausführen!
Dim cbbtn As CommandBarButton
Set cbbtn = VBE.CommandBars("Voreinstellung").Controls.Add(msoControlButton)
With cbbtn
.FaceId = 7
.Caption = "WriteCode_1"
.TooltipText = "Schreibt den Code ""abc"" in das aktuelle Modul"
End With
Set cbbtn = VBE.CommandBars("Voreinstellung").Controls.Add(msoControlButton)
With cbbtn
.FaceId = 122
.Caption = "WriteCode_2"
.TooltipText = "Schreibt den Code ""xyz"" in das aktuelle Modul"
End With
End Sub
Sub ButtonEventsAnlegen()
Dim cbbtnevt As clsCommandBarButton, i As Long
For i = 1 To 2
cbbtnColl.Add New clsCommandBarButton
Set cbbtnevt = cbbtnColl(cbbtnColl.Count)
Set cbbtnevt.CommandBarButton = VBE.CommandBars("Voreinstellung").Controls("WriteCode_" & i)
Next i
End Sub
Sub WriteCode(Text As String)
With VBE.ActiveCodePane.CodeModule
.InsertLines .CountOfLines, Text
End With
Application.OnTime Now, "NochAktiv"
End Sub
Sub NochAktiv()
If cbbtnColl.Count = 0 Then ButtonEventsAnlegen
End Sub
in ein neues Klassenmodul (clsCommandBarButton)
Private WithEvents m_CommandBarButton As CommandBarButton
Public Property Set CommandBarButton(cbb As CommandBarButton)
Set m_CommandBarButton = cbb
End Property
Public Property Get CommandBarButton() As CommandBarButton
Set CommandBarButton = m_CommandBarButton
End Property
Private Sub m_CommandBarButton_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
Select Case Ctrl.Caption
Case "WriteCode_1"
WriteCode "'abc"
Case "WriteCode_2"
WriteCode "'xyz"
End Select
End Sub
in das Modul ThisDocument
Private Sub Document_Open()
ButtonAnlegen
ButtonEventsAnlegen
End Sub
Gruß Mr. K.
|