Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA - CommandBars("Cell")

Forumthread: VBA - CommandBars("Cell")

VBA - CommandBars("Cell")
10.10.2005 14:19:56
Alexander
Hallo Leuts.
Ich hab endlich mal wieder ein schönes Problem:
Ich muss im Kontextmenü (Rechtsklickmenü) die Einträge "Zellen einfügen..." und "Zellen löschen..." deaktivieren, den Rest aber aktiv halten.
Das tue ich mit folgendem Code:
CommandBars("Cell").Controls("Zellen einfügen...").Enabled = False
CommandBars("Cell").Controls("Zellen löschen...").Enabled = False
Das funktioniert aber erst, nachdem das Menü einmal geöffnet wurde. Ansonsten bekomme ich einen Laufzeitfehler 5: "Ungültiger Prozeduraufruf oder ungültiges Argument".
Das ganze lässt sich leicht replizieren, wenn man vor dien beiden obigen Zeilen folgenden Code ausführt:
CommandBars("Cell").Reset 'In den Originalzustand versetzen
Kann mir jemand sagen, was da beim Anzeigen verändert wird? Laut Überwachungsfenster ändert sich nämlich nichts und die VBA-Hilfe gibt da sowieso nichts her.
Schon mal Danke für eure Hilfe.
Gruß, Alex.
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - CommandBars("Cell")
10.10.2005 14:42:01
Alexander
Hallo Leuts.
Problem gelöst! Und die Lösung ist sooooooooooo DUMM!
Problem ist: Nach dem Reset-Befehl heißt das Control nicht "Zellen einfügen..." sondern "Zellen..." und wird nach einiger Zeit einfach umbenannt (wie oder wieso auch immer).
Jedenfalls gehe ich jetzt auf CommandBars("Cell").Controls(5) los und alles ist Friede, Freude, Eierkuchen!
Gruß an alle Billy-Lovers!
Anzeige
;
Anzeige

Infobox / Tutorial

Anpassung des Kontextmenüs mit VBA in Excel


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Modul einfügen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" > "Modul".

  3. Code eingeben: Füge den folgenden Code in das Modul ein:

    Sub DeaktiviereZellenEinfügenUndLoeschen()
       ' Kontextmenü zurücksetzen
       Application.CommandBars("Cell").Reset
    
       ' Deaktiviere die Optionen im Kontextmenü
       Application.CommandBars("Cell").Controls("Zellen einfügen...").Enabled = False
       Application.CommandBars("Cell").Controls("Zellen löschen...").Enabled = False
    End Sub
  4. Code ausführen: Führe das Makro aus, indem du F5 drückst oder das Makro über das Menü auswählst.

  5. Überprüfen: Klicke mit der rechten Maustaste auf eine Zelle, um das Kontextmenü anzuzeigen und die Änderungen zu überprüfen.


Häufige Fehler und Lösungen

  • Laufzeitfehler 5: Wenn du einen Laufzeitfehler 5 erhältst, kann das daran liegen, dass das Kontextmenü nach dem Reset-Befehl nicht mehr die erwarteten Namen hat. In einem solchen Fall solltest du den Namen der Controls überprüfen oder die ID der Controls verwenden.

    Beispiel:

    Application.CommandBars("Cell").Controls(5).Enabled = False
  • Control-Namen ändern sich: Beachte, dass nach dem Aufruf von Application.CommandBars("Cell").Reset die Namen der Controls sich ändern können. Die Lösung könnte sein, die Controls über ihre ID anzusprechen, wie von Benutzer gordon vorgeschlagen.


Alternative Methoden

Eine alternative Methode zur Deaktivierung von Kontextmenüeinträgen könnte das Verwenden von Ereignissen in Excel sein. Du könntest zum Beispiel das Workbook_Open-Event nutzen, um die Einstellungen direkt beim Öffnen der Datei zu ändern.

Private Sub Workbook_Open()
    Call DeaktiviereZellenEinfügenUndLoeschen
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, die zeigen, wie du das Excel-Context-Menü weiter anpassen kannst:

  1. Alle Einträge im Kontextmenü deaktivieren:

    Sub DeaktiviereAlleControls()
       Dim ctrl As CommandBarControl
       For Each ctrl In Application.CommandBars("Cell").Controls
           ctrl.Enabled = False
       Next ctrl
    End Sub
  2. Bestimmte Einträge aktivieren:

    Sub AktiviereBestimmteControls()
       Application.CommandBars("Cell").Controls("Zellen einfügen...").Enabled = True
    End Sub

Tipps für Profis

  • Nutze IDs: Arbeite, wenn möglich, mit den IDs der Controls, um sicherzustellen, dass deine Änderungen unabhängig von den Namen der Controls funktionieren.
  • Regelmäßige Tests: Teste deinen Code regelmäßig, insbesondere nach Änderungen im Excel-Interface, um sicherzustellen, dass alles weiterhin funktioniert.
  • Sichere deine Arbeit: Erstelle immer eine Sicherheitskopie deiner Excel-Datei, bevor du VBA-Änderungen vornimmst.

FAQ: Häufige Fragen

1. Wie kann ich das Kontextmenü wiederherstellen?
Wenn du das Kontextmenü wiederherstellen möchtest, kannst du einfach den Reset-Befehl erneut ausführen:

Application.CommandBars("Cell").Reset

2. Gibt es eine Möglichkeit, nur bestimmte Einträge zu deaktivieren?
Ja, du kannst gezielt nur die Einträge deaktivieren, die du nicht möchtest. Nutze dazu die Namen oder IDs der Controls.

3. Funktioniert dieser Code in allen Excel-Versionen?
Der Code sollte in den meisten modernen Excel-Versionen funktionieren, kann aber je nach Version und Updates variieren. Teste ihn in deiner spezifischen Umgebung.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige