Kontextmen� in der 
Entwicklungsumgebung erweitern

04.02.2002


Auch in der Entwicklungsumgebung, also im VBA-Editor,  
kann man u.a. das Kontextmen� erweitern.
Ein Anwendungsbeispiel k�nnte das Einf�gen
immer wieder ben�tigter Routinen sein.

In diesem Beispiel wird dem Kontextmen� der Eintrag "Tabellen durchlaufen"
hinzugef�gt.
Wird dieser Men�punkt aufgerufen wird an der aktuellen Cursorpostion
mittels SendKeys eine Schleife eingef�gt, die alle Tabellen abarbeitet:
    For Each Tabelle In ActiveWorkbook.Sheets
        MsgBox Tabelle.Name
    Next Tabelle
 

Wichtig:
Setzen Sie zun�chst einen Verweis auf "Microsoft Visual Basic for Applications Extensibility"
(siehe "Extras" - "Verweise")

Schritt 1
F�gen Sie diesen Code unter "DieseArbeitsmappe" ein:

Private Sub Workbook_Open()
    Men�_l�schen
    Men�_erstellen
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Men�_l�schen
End Sub
 
Schritt 2
F�gen Sie diesen Code in einem neuen Modul ein (beispielsweise "Modul1"):
Dim clsAddMenu As New clsMenue
Sub CodeEinf�gen()
    SendKeys "For Each Tabelle In ActiveWorkbook.Sheets" & vbNewLine
    SendKeys vbTab & "MsgBox Tabelle.Name" & vbNewLine
    SendKeys "{HOME}" & ("Next Tabelle")
End Sub
Sub Men�_erstellen()
    clsAddMenu.AddMenuItem
End Sub
Sub Men�_l�schen()
    Set clsAddMenu = Nothing
    On Error Resume Next
    Application.VBE.CommandBars("Code Window"). _
       Controls("For Each Tabelle...").Delete
End Sub
 
Schritt 3
F�gen Sie diesen Code in ein Klassenmodul ein.
Vergeben Sie diesem Klassenmodul den Namen "clsMenue"
Public WithEvents Menue As VBIDE.CommandBarEvents
Public Sub AddMenuItem()
    Dim ctlTopMenu As CommandBarButton
    Set ctlTopMenu = Application.VBE.CommandBars("Code Window"). _
       Controls.Add(Type:=msoControlButton)
    ctlTopMenu.BeginGroup = True
    ctlTopMenu.Caption = "For Each Tabelle..."
    ctlTopMenu.Enabled = True
    Set Menue = Application.VBE.Events.CommandBarEvents(ctlTopMenu)
End Sub
Private Sub Menue_Click(ByVal cmdBar As Object, handled As Boolean, Cancel As Boolean)
    Call CodeEinf�gen
End Sub