PDA

Vollständige Version anzeigen : Mehrere Fehler (Laufzeitfehler) im bestehenden Programm


wowa777
21.03.2009, 09:09
Hallo, ich bin VBA-Anfänger und muss ein bestehendes Dokument anpassen. Leider gibt es sofort beim Start einige Fehler und ich habe keine Ahnung, was die bedeuten. Hoffe sehr, ihr könnt mir helfen!

Gleich beim Start des Dokuments klicke ich auf "Makros aktivieren" und danach erscheint das Fenster mit der Meldung

"Laufzeitfehler '5': Ungültiger Prozeduraufruf oder ungültiges Argument"

Wenn ich dann auf "Debuggen" klicke, wird die Zeile

Application.CommandBars("Task Pane").Visible = False

gelb hervorgehoben. Diese befindet sich innerhalb von

Sub NeueSymbolleiste_erstellen()

jinx
21.03.2009, 09:20
Moin, wowa777,

Du verwendest Excel97/Excel2000 (Task Pane steht meines Wissens erst ab Excel2002/XP zur Verfügung)? Entweder über Val(Application.Version) die interne Versionsnummer abfragen (Excel2000 9, Excel2002 10) und entsprechend verzweigen oder eine Fehlerbehandlung einbauen.

Kann z. B. durch die folgenden Anweisungen übergangen werden (aber ich fürchte, da werden noch mehr Fehler auftauchen, sodass die Fehlerbehandlung eventuell mit einer Sprungmarke versehen am Ende der Prozedur stehen sollte und per Resume Next wieder zurückgesprungen werden sollte an die nächste Codeanweisung):

On Error Resume Next
Application.CommandBars("Task Pane").Visible = False
If Err Then
MsgBox "Fehler beim Ausblenden der Taskleiste", vbInformation, "Hinweis"
Err.Clear
End If
On Error GoTo 0

wowa777
21.03.2009, 11:18
Ok, vielen Dank. Hab's nun mit Excel 2007 geöffnet und der Fehler ist tatsächlich weg. Hab nun einen anderen Fehler. Und zwar wird nun ebenfalls der Laufzeitfehler '5' wegen den folgenden beiden Zeilen verursacht:

Set CB = Application.CommandBars.Add(Name:=Symbolleistenname, _
temporary:=True, Position:=msoBarTop)

Woran könnte das liegen?

jinx
21.03.2009, 11:59
Moin, wowa777,

daran, dass immer nur ein Stückchen Code angezeigt wird? ;)

Möglicherweise ist die Variable Symbolleistenname leer, oder es gibt eine Symbolleiste dieses Namens in der Auflistung der Symbolleisten...

wowa777
21.03.2009, 17:21
Sorry, ich wollte nicht gleich 1000 Zeilen hier rein schreiben, damit nicht alle gleich abgeschreckt werden. Aber ich sehe ein, dass es durchaus ein bißchen mehr Code hätte sein können. :-)

Also, hier der komplette Aufbau der Symbolleiste:

Const Symbolleistenname = "Meine Symbolleiste"

Sub NeueSymbolleiste_erstellen()
Application.CommandBars("Formatting").Visible = False
Application.CommandBars("Standard").Visible = False
Application.CommandBars("Drawing").Visible = False
Application.CommandBars("Task Pane").Visible = False


Set CB = Application.CommandBars.Add(Name:=Symbolleistenname, _
temporary:=True, Position:=msoBarTop)
CB.Visible = True
Set CBC = CB.Controls.Add(Type:=msoControlButton)
With CBC
.FaceId = 1088
.Caption = "Löschen"
.OnAction = "loeschen"
.BeginGroup = True 'Gruppierung beginnen
End With
Set CBC = CB.Controls.Add(Type:=msoControlButton)
With CBC
.FaceId = 1087
.Caption = "Erstellen"
.OnAction = "erstellen"
End With
Set CBC = CB.Controls.Add(Type:=msoControlButton)
With CBC
.FaceId = 1089
.Caption = "Hilfe"
.OnAction = "info"
.BeginGroup = True 'Gruppierung beginnen
End With
Application.CommandBars("Meine Symbolleiste").Controls.Add Type:= _
msoControlButton, ID:=3, Before:=1

With Application
.ShowStartupDialog = False
.DisplayFormulaBar = False
End With
End Sub

ransi
21.03.2009, 17:59
HAllo
ungetestet:
On error resume next
application.commandbars(symbolleistenname).delete
on error goto 0
Set CB = Application.CommandBars.Add(Name:=Symbolleistenname, _
temporary:=True, Position:=msoBarTop)

ransi