Hallo,
hier mal ein Auszug aus meinem aktuellen Projekt.
In VB wird automatisch eine neue Symbolleiste erstellt mit einem Button drauf.
Beachte auch die Notizen am Ende des Thread's.
Starte ein neues Projekt (AddIn) und füge in den automatisch erstellten Designer folgenden Code ein:
Option Explicit
'------------------------------------------------------
' Instanzzieren bzw. Implementieren der Verweise
'------------------------------------------------------
' Variable zum Verweis auf die VBIDE-Schnittstelle
' (Microsoft Visual Basic x.x Extensibility)
Public VBInstance As VBIDE.VBE
' Variable auf den Designer bzw. Klassenmodul "Connect"
Public Connect As dsrConnect
Const msoBarTop = 1 'Toolbaralignment
Const msoControlButton = 1 'Toolbarbutton
Const msoControlComboBox = 4 'Toolbarcombobox
'diverse Objekte einer Toolbar instanzieren
Dim VBCommBar As CommandBar 'ToolBar selbst
Dim VBCommBarCtrl_1 As CommandBarControl 'erster Button
Dim IsCommBar As Boolean
'Events-Schnittstelle
Public WithEvents menEvent_1 As CommandBarEvents 'Klick auf Button
Public FormDisplayed As Boolean
Dim mcbMenuCommandBar As Office.CommandBarControl
Public WithEvents MenuHandler As CommandBarEvents _
'Ereignisbehandlungsroutine der Befehlsleiste
'------------------------------------------------------
'Diese Method fügt das Add-In zu VB hinzu
'------------------------------------------------------
Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal _
ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As _
Object, custom() As Variant)
On Error GoTo AddinInstance_OnConnection_Error
'VB-Instanz speichern
Set VBInstance = Application
'Dies ist eine gute Stellen, um eine Haltepunkt zu setzen
'und verschiedene Add-In-Objekte, -Eigenschaften und
'-Methoden zu testen
Debug.Print VBInstance.FullName
If ConnectMode = ext_cm_External Then
'Wird von der Symbolleiste des Assistenten verwendet,
'um diesen Assistent zu starten.
Else
Set mcbMenuCommandBar = AddToAddInCommandBar("Meine Symbolleiste")
'Ereignis auffangen
'Set Me.MenuHandler = VBInstance.Events.CommandBarEvents(
' mcbMenuCommandBar)
End If
If ConnectMode = ext_cm_AfterStartup Then
If GetSetting(App.Title, "Settings", "DisplayOnConnect", "0") = "1" Then
End If
End If
On Error GoTo 0
Exit Sub
AddinInstance_OnConnection_Error:
SchreibeLogFehler Err.Number, Err.Description, Erl, "dsrConnect", _
"AddinInstance_OnConnection"
End Sub
'------------------------------------------------------
'Diese Methode entfernt das Add-In aus VB
'------------------------------------------------------
Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As _
AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
On Error GoTo AddinInstance_OnDisconnection_Error
VBCommBarCtrl_1.Delete
VBCommBar.Delete
Set VBInstance = Nothing '???
'Set AddToAddInCommandBar = Nothing
Set VBCommBar = Nothing
Set VBCommBarCtrl_1 = Nothing
Set menEvent_1 = Nothing
On Error GoTo 0
Exit Sub
AddinInstance_OnDisconnection_Error:
SchreibeLogFehler Err.Number, Err.Description, Erl, "dsrConnect", _
"AddinInstance_OnDisconnection"
End Sub
Function AddToAddInCommandBar(sCaption As String) As Office.CommandBarControl
Dim cbMenuCommandBar As Office.CommandBarControl 'Befehlsleistenobjekt
Dim cbMenu As Object
On Error GoTo AddToAddInCommandBar_Error
Set AddToAddInCommandBar = cbMenuCommandBar
IsCommBar = True
'Hinzufügen einer CommandBar
'MsgBox "Hinzufügen einer CommandBar"
Set VBCommBar = VBInstance.CommandBars.Add("MeinAddIn", msoBarTop)
VBCommBar.Visible = True
'Hinzufügen des ersten Buttonszur erstellten Symbolleiste
Clipboard.SetData LoadResPicture(101, 0) 'Grafik aus Ressource laden
Set VBCommBarCtrl_1 = VBCommBar.Controls.Add(msoControlButton)
VBCommBarCtrl_1.PasteFace
With VBCommBarCtrl_1
.Style = msoButtonIcon
.BeginGroup = False
.Caption = "Formular"
.ToolTipText = "Formular starten"
End With
'Events setzen
Set menEvent_1 = VBInstance.Events.CommandBarEvents(VBCommBarCtrl_1)
On Error GoTo 0
Exit Function
AddToAddInCommandBar_Error:
SchreibeLogFehler Err.Number, Err.Description, Erl, "dsrConnect", _
"AddToAddInCommandBar"
End Function
'Klick auf den ersten Button
Private Sub menEvent_1_Click(ByVal CommandBarControl As Object, handled As _
Boolean, CancelDefault As Boolean)
On Error GoTo menEvent_1_Click_Error
frmAddIn.Show vbModal
On Error GoTo 0
Exit Sub
menEvent_1_Click_Error:
SchreibeLogFehler Err.Number, Err.Description, Erl, "dsrConnect", _
"menEvent_1_Click"
End Sub
End Sub Dann brauchst Du noch eine Ressorcendatei in welche Du ein Bildchen 16x16 einfügst mit dem Wert 101.
Die Programmierung der Formulare funktioniert auch weiterhin wie gehabt.
Beste Wünsche,
Br an
---
Du stolperst nicht durch die Steine die Dir in den Weg gelegt werden,
sondern durch die Einfallslosigkeit ihnen aus dem Weg gehen zu können. |