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

CommandBars.FindControl

Forumthread: CommandBars.FindControl

CommandBars.FindControl
Steffen
Hallo Zusammen,
Ich möchte in einem Programm Standard Befehle(Speichern,Füllfarbe,Schriftgrad usw.) in der Menüleiste festlegen .
mit folgenden Script hab ich es versucht erst zuprüfen ob erschon vorhanden ist u wenn nicht soll er eingefügt werden.
Sub steuerl()
If Not CommandBars(1).FindControl(ID:=1728).Enabled Then
Application.CommandBars("Worksheet Menu Bar").Controls.Add Type:= _
msoControlButton, ID:=1728, Before:=10
End If
If Not CommandBars(1).FindControl(ID:=1731).Enabled Then
Application.CommandBars("Worksheet Menu Bar").Controls.Add Type:= _
msoControlButton, ID:=1731, Before:=10
End If
If Not CommandBars(1).FindControl(ID:=401).Enabled Then
Application.CommandBars("Worksheet Menu Bar").Controls.Add Type:= _
msoControlButton, ID:=401, Before:=10
End If
If Not CommandBars(1).FindControl(ID:=3).Enabled Then
Application.CommandBars("Worksheet Menu Bar").Controls.Add Type:= _
msoControlButton, ID:=113, Before:=10
End If
If Not CommandBars(1).FindControl(ID:=1691).Enabled Then
Application.CommandBars("Worksheet Menu Bar").Controls.Add Type:= _
msoControlButton, ID:=1691, Before:=9
End If
If Not CommandBars(1).FindControl(ID:=401).Enabled Then
Application.CommandBars("Worksheet Menu Bar").Controls.Add Type:= _
msoControlButton, ID:=401, Before:=10
End If
If Not CommandBars(1).FindControl(ID:=3).Enabled Then
Application.CommandBars("Worksheet Menu Bar").Controls.Add Type:= _
msoControlButton, ID:=3, Before:=10
End If
End Sub

die bringt mir aber ein Laufzeitfehler.
Ich vermute mal das es an der Eigenschaft Enabled liegt.
Viele Grüße Steffen
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: CommandBars.FindControl
14.11.2009 22:02:13
Nepumuk
Hallo,
Enabled gibt Wahr oder Falsch zurück. Das kannst du nicht mit Not vergleichen. Also ungefähr so:
Sub steuerl()
    
    Dim objCommandBarControl As CommandBarControl
    
    Set objCommandBarControl = CommandBars(1).FindControl(ID:=1728)
    If objCommandBarControl Is Nothing Then _
        CommandBars(1).Controls.Add ID:=1728, Before:=10
    
End Sub

Für genauere Angabe hab ich momentan zu wenig Blut im Alkohol. Ach ja, das: Type:=msoControlButton solltest du keinesfalls machen, wenn du nicht 100% sicher bis das es tatsächlich ein Button ist. Außerdem macht es keinen Sinn, wenn du die ID angibst, die weiß selbst, welches Control sie benutzt.
Gruß
Nepumuk
Anzeige
Danke Nepumuk..
14.11.2009 22:10:16
Steffen
..hab ich wieder was gelernt, werd das jetzt erstmal verdauen ;-)
Bin immer wieder beeindruckt wie kompetent hier in diesem Forum einem geholfen wird!
viele Grüße Steffen
Endlösung
14.11.2009 23:44:28
Steffen
Ich hab es jetzt folgendermaßen gelöst:
Sub steuerl()
Dim i As Long, n As Long
Dim myCommandBar As CommandBar
Set myCommandBar = Application.CommandBars("Worksheet Menu Bar")
For i = 1 To 6
n = Choose(i, 1728, 1731, 401, 1691, 113, 3)
If CommandBars(1).FindControl(ID:=n) Is Nothing Then
CommandBars(1).Controls.Add ID:=n, Before:=myCommandBar.Controls.Count + 1
End If
Next
End Sub
Danke nochmals an Nepumuk
Viele Grüße Steffen
Anzeige
;
Anzeige

Infobox / Tutorial

CommandBars.FindControl in Excel VBA


Schritt-für-Schritt-Anleitung

Um die CommandBars.FindControl Methode in Excel VBA effektiv zu nutzen, folge diesen Schritten:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Erstelle ein neues Modul:

    • Klicke mit der rechten Maustaste auf einen vorhandenen Eintrag im Projektfenster, wähle „Einfügen“ und dann „Modul“.
  3. Füge den folgenden Code ein:

    Sub steuerl()
       Dim i As Long, n As Long
       Dim myCommandBar As CommandBar
       Set myCommandBar = Application.CommandBars("Worksheet Menu Bar")
       For i = 1 To 6
           n = Choose(i, 1728, 1731, 401, 1691, 113, 3)
           If CommandBars(1).FindControl(ID:=n) Is Nothing Then
               CommandBars(1).Controls.Add ID:=n, Before:=myCommandBar.Controls.Count + 1
           End If
       Next
    End Sub
  4. Führe das Makro aus:

    • Gehe zurück zu Excel, drücke ALT + F8, wähle steuerl aus und klicke auf „Ausführen“.

Dieser Code überprüft, ob bestimmte Steuerelemente (Button-IDs) in der Menüleiste vorhanden sind, und fügt sie hinzu, wenn sie nicht existieren.


Häufige Fehler und Lösungen

Fehler 1: Laufzeitfehler aufgrund der Enabled-Eigenschaft

  • Lösung: Verwende die Is Nothing-Überprüfung, um festzustellen, ob das Steuerungselement existiert. Beispiel:
    If CommandBars(1).FindControl(ID:=1728) Is Nothing Then
      CommandBars(1).Controls.Add ID:=1728, Before:=10
    End If

Fehler 2: Falsche Verwendung von msoControlButton

  • Lösung: Stelle sicher, dass die ID des Controls korrekt ist und dass das Control tatsächlich ein Button ist, bevor du Type:=msoControlButton verwendest.

Alternative Methoden

Anstelle von CommandBars.FindControl kannst du auch die Ribbon-API verwenden, wenn Du Excel 2007 oder höher verwendest. Diese Methode ist moderner und bietet mehr Flexibilität. Hier ein Beispiel:

Sub RibbonControl()
    ' Beispielcode für das Arbeiten mit dem Ribbon
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du CommandBars in Excel verwenden kannst:

  1. Hinzufügen eines neuen Buttons:

    Sub AddButton()
       Application.CommandBars("Worksheet Menu Bar").Controls.Add Type:=msoControlButton, ID:=1728, Before:=10
    End Sub
  2. Überprüfen der Steuerung mit einer ID-Liste:

    Sub CheckControls()
       Dim ids As Variant
       ids = Array(1728, 1731, 401)
       For Each id In ids
           If CommandBars(1).FindControl(ID:=id) Is Nothing Then
               CommandBars(1).Controls.Add ID:=id
           End If
       Next id
    End Sub

Tipps für Profis

  • Verwendung von application.commandbars: Nutze die application.commandbars-Methode, um auf spezifische CommandBars zuzugreifen und diese zu modifizieren.
  • ID-Liste: Wenn Du mit mehreren Control-IDs arbeitest, erstelle eine Liste (Array), um deinen Code zu vereinfachen und lesbarer zu machen.
  • Debugging: Nutze Debugging-Tools in VBA, um Laufzeitfehler leichter zu identifizieren und zu beheben.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen CommandBars und Ribbon? CommandBars ist die ältere Methode, um Steuerelemente in Excel zu verwalten, während das Ribbon eine modernere Benutzeroberfläche bietet.

2. Kann ich CommandBars.FindControl in Excel 365 verwenden? Ja, CommandBars.FindControl ist in Excel 365 verfügbar, aber es wird empfohlen, die Ribbon-API für neuere Entwicklungen zu verwenden.

3. Wo finde ich die ID-Listen für Controls? Die ID-Listen für Controls können in der Microsoft-Dokumentation gefunden werden, oder du kannst sie selbst mit VBA ermitteln, indem du die FindControl-Methode benutzt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige