2016-08-04 50 views
2

Ich versuche, ein Activeworkbook zu speichern, aber wenn ich den folgenden Code verwenden, bekomme ich immer den Fehler "Kompilieren Fehler: erwartete Funktion oder Variable" mit dem Wort "Format" markiert.VBA-Fehler beim Speichern der Datei mit Format (Datum) -Funktion

Es verwirrt mich, weil ich genau die gleiche Funktion und Format in einem anderen Makro verwendet und es die Datei perfekt gespeichert. Ich sorgte auch dafür, sie sind die gleichen Typen von Variablen hatte bereits definiert ...

Hier ist die eine Zeile Code

ActiveWorkbook.SaveAs Filename:=SavedPath & format(Date, "mmddyyyy") & " 4512 GLUpload.xlsm" 

Die Variable savedpath ist in Ordnung, denn wenn ich diese Zeile ohne das Format Teil laufen, spart die Datei, aber nicht sicher, warum dies vermasseln. In meinem anderen Code ist das Format groß geschrieben, aber es ist nicht hier.

+0

@Comintern Ich versuchte mit 'Format $', aber ich habe den Fehler: "Kompilierfehler" Typ-Deklaration Zeichen entspricht nicht deklarierten Datentyp ". Ich auch überprüft und das Wort 'Format' wird nirgendwo sonst verwendet In meinem Modul verwendete er formatrow oder format4512 als Variable, formatierte sich aber nie selbst. –

+0

Der einzige Weg, wie ich den genauen Compilerfehler replizieren kann, ist, wenn ich einen 'Sub' namens' Sub SavedPath () '. Wenn es einen Wert zurückgeben soll, ändern Sie es in eine' Funktion'. – Comintern

+0

Überprüfen Sie auch nach einem 'Sub Format' mit 2 Argumenten. Das gibt auch den gleichen Compiler-Fehler. – Comintern

Antwort

5

Der Compilerfehler, den Sie erhalten, zeigt an, dass VBA einen zuweisbaren Wert (entweder ein Literal, eine Variable oder den Rückgabewert einer Funktion) erwartet. Dies bedeutet, dass einer der Bezeichner in der Anweisung rechts neben dem Gleichheitszeichen nicht in diese Kategorien fällt. Also, entweder SavedPath ist irgendwo als Sub SavedPath() definiert, oder es ist ein Sub Format(arg1, arg2) irgendwo definiert (wenn es eine andere Anzahl von Argumenten hatte, würden Sie eine "Falsche Anzahl von Argumenten oder ungültige Eigenschaftenzuweisung" Fehler erhalten). Der zweite Hinweis (in den Kommentaren) ist, dass die Änderung von format zu dem stark typisierten Format$ einen Fehler "Typ-Deklarationszeichen entspricht nicht deklariertem Datentyp" ergibt. Dies weist darauf hin, dass der Compiler das Symbol format nicht als Funktionsaufruf behandelt (10 ist die stark typisierte Version von Format()). Die Lösung besteht darin, die fehlerhafte Verwendung des VBA-Funktionsnamens aufzuspüren und ihn umzubenennen.

Ein perfektes Beispiel dafür, warum die Vermeidung von VBA-Schlüsselwörtern und Funktionsnamen eine gute Übung ist.

+0

Guter Fang !!!!! –

+1

@SiddharthRout - Testcode für Rubberduck hat mich in all die komischen Compilerquirks in VBA eingeweiht ... ;-) – Comintern

+0

Ich war mir dieser Eigenart bewusst. In der Tat gibt es einen anderen Stackoverflow-Post, wo ich das gleiche Ding vorgeschlagen habe, aber nicht finden konnte. Ich erinnere mich nur, dass Rory auch versuchte, dasselbe zu beantworten.Es ist schon 1 Uhr morgens und ich muss ins Bett gehen, sonst wird sich meine Frau sicher von mir scheiden lassen: D Lass mich sehen, ob ich diesen Faden am Morgen finden kann ... am Abend –