Microsoft Excel

Herbers Excel/VBA-Archiv

Kontextmenü



Excel-Version: 10.0 (Office XP)

Betrifft: Kontextmenü
von: Holger Levetzow
Geschrieben am: 04.06.2002 - 21:27:37

Hallo Leute,

ich habe folgendes Problem:
ich möchte in einer Tabelle eine Zelle mit der rechten Maustaste anklicken. Im Kontextmenü (die Standardeinträge sollen weg) sollen als Popup die Namen aller anderen Tabellen erscheinen. In jeder dieser Tabellen stehen in A2 bis A21 Namen, die als Einträge im jeweiligen Popup-Menü erscheinen sollen. Wähle ich einen Namen aus, soll dieser in die aufrufende Tabelle eingetragen werden.
Ich habe es versucht (auch mit Hilfe des Tutorial von Hans), bekomme es aber nicht hin. Kann jemand helfen?

Danke Holger

  

Re: Kontextmenü
von: Klaus Schubert
Geschrieben am: 04.06.2002 - 22:44:49

Hallo Holger,

folgende Prozeduren in ein normales Modul kopieren:


Sub KontextmenüInitialisieren()
Dim MeinKontextmenü As CommandBarControl
Dim Untermenüeintrag As CommandBarControl
Dim intCounter1 As Integer, intCounter2 As Integer

With CommandBars("Cell")
    
For intCounter1 = 1 To .Controls.Count
.Controls(intCounter1).Visible = False
Next intCounter1
 

For intCounter1 = 1 To Sheets.Count
If Sheets(intCounter1).Name <> ActiveSheet.Name Then

    Set MeinKontextmenü = .Controls.Add(msoControlPopup)
       
    With MeinKontextmenü
        .Caption = Sheets(intCounter1).Name
    End With
        
        For intCounter2 = 2 To 21
            
            Set Untermenüeintrag = MeinKontextmenü.Controls.Add(Type:=msoControlButton)
            
            With Untermenüeintrag
                .Caption = Sheets(intCounter1).Cells(intCounter2, 1).Value
                .OnAction = "NameEintragen"
            End With
        
        Next intCounter2
End If
Next intCounter1

End With
        
End Sub


Sub NameEintragen()
Dim myControl As Object
Set myControl = CommandBars.ActionControl
With myControl
    ActiveCell = .Caption
End With
End Sub

Das aktive Blatt, in welchem die Einträge gemacht werden sollen, wird nicht berücksichtigt.

Wenn sich die Einträge in den Tabellenblättern nicht oder nur kaum ändern, so verwende unter "DieseArbeitsmappe" folgenden Code:

Private Sub Workbook_Open()
KontextmenüInitialisieren
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Cell").Reset
End Sub

Wenn sich die werte in den Tabellenblättern oft ändern, würde ich dir unter "DieseArbeitsmappe" folgenden Code empfehlen:

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Application.CommandBars("Cell").Reset
KontextmenüInitialisieren
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Cell").Reset
End Sub


Ich hoffe, das war es , was du wolltest!

Gruß Klaus


  

Re: Kontextmenü
von: Holger Levetzow
Geschrieben am: 07.06.2002 - 09:59:03

Hallo Klaus,

Super, vielen Dank. Das war der Anstoß, den ich nach kleinen Änderungen nutzen konnte (Workbook_SheetBeforeRightClick?). Nach 2 Tagen Arbeit ist damit meine Programm fertig.

Holger