Ich habe gerade begonnen, VBA in einem Word 2007 (Office XP) zu verwenden und ich versuche, eine Schleife zu erstellen, um durch alle Symbolleisten und durch alle Schaltflächen in jeder Symbolleiste zu gehen.VBA For .. Next Schleife versucht, durch Symbolleisten Schaltflächen
habe ich diesen Code
Public Sub PasteFromClipboard()
Dim i As Long
Dim j As Long
Dim sCmdBar As CommandBar
Dim thisCommandBar As CommandBar
Dim thisCommandButton As CommandBarButton
Debug.Print "Number", "Name", "Visible", "Built-in"
For i = 1 To Application.CommandBars.Count
Set sCmdBar = Application.CommandBars(i)
If sCmdBar.Visible = True Then
j = j + 1
Debug.Print j, sCmdBar.Name, sCmdBar.Visible, sCmdBar.BuiltIn
Dim X As Long
Set thisCommandBar = Application.CommandBars(sCmdBar.Name)
For X = 1 To thisCommandBar.Controls.Count - 1
Set thisCommandButton = thisCommandBar.Controls(X)
If thisCommandButton.Caption = "Paste" Then
Dim a As Long
a = a + 1
Exit For
End If
Next X
End If
Next i
Aber ich habe Laufzeitfehler 13: Typenkonflikt auf der folgenden Zeile:
Set thisCommandButton = thisCommandBar.Controls(X).
Warum dies geschieht und wie es zu beheben?
Noch eine Frage. Ist es möglich, die Bedingung in der Art und Weise zu ändern, um die Beschriftung der Schaltfläche zu finden, wenn sie in der lokalen Sprache geschrieben ist? Nicht Englisch. In dem von mir verwendeten Wort befinden sich im Bereich "Zwischenablage" Schaltflächen wie "Vložit vše" (Alles einfügen) und "Vymazat vše" (Alles löschen) und "Možnosti" (Optionen). Und ich möchte die Symbolleiste finden, die diese drei Knöpfe enthält (aber sicher, dass ich die echten englischen Untertitel nicht kenne).
Performance-Tipp: die äußere Schleife auch ein 'Für Each' Schleife sein sollte. Sie iterieren eine Objektsammlung, verwenden Sie eine 'For Each'-Schleife. Verwenden Sie 'For ... Next'-Schleifen, wenn Sie Arrays iterieren. –
Es war nur ein Code für einen Test. Ich habe nicht auf Leistung oder netten Stil geachtet. Ich wollte nur einen einfachen Code erstellen, um die Symbolleisten zu durchsuchen ... – user1141649
Wenn Sie feststellen, dass die Iteration einer Objektsammlung nach Index mit einer 'For'-Schleife statt einer' For Each'-Schleife bis zu 27-mal langsamer abläuft, vielleicht werde einsinken. –