Ich verwende ein VBA-Makro, um einen Teil einer Excel-Tabelle zu automatisieren. Die folgende Zeile führt immer wieder zu einem Laufzeitfehler 1004# Anwendungs- oder Objektdefinierter Fehler
Sheets("Material").Last.Offset(0, 1).Value = "=SUMIF(MainTable[0],AG12,MainTable[Cost])"
Anhand von Uhren weiß ich, dass die linke Seite der Gleichung auf die richtige Zelle verweist. Ich gehe davon aus, dass der Fehler in der rechten Zeichenfolge liegt, die in die Zelle geschrieben wird – ich denke, möglicherweise bei meinen Tabellenverweisen? Die restlichen Formeln als Zeichenfolgen lassen sich alle problemlos schreiben und enthalten keine Tabellenverweise.
Antwort1
Ich nahm an, dass der Fehler im Code lag, weil es, als ich den Laufzeitfehler erhielt, keine Ausgabe in die angegebene Zelle gab. Das Problem tritt tatsächlich auf, wenn eine Formel in eine Zelle geschrieben werden sollte und dieses Popup-Fenster mit der Meldung „Wir haben ein Problem mit dieser Formel gefunden …“ generiert würde. Nicht dasselbe wie Fehler vom Typ #NAME?, #VALUE!, #N/A. In meinem Fall hat mein Code einen Bereich in eine Tabelle mit dem Namen MainTable eingefügt und eine der Spaltenüberschriften war „Effektive Kosten“. Der Code hat eine Formel als Zeichenfolge mit Verweis auf MainTable[Kosten] eingefügt, was MainTable[Effektive Kosten] hätte sein sollen.
Das VBA erzeugt einen Laufzeitfehler, das Sub wird angehalten und die Problemzeichenfolge wird nie in die Zelle ausgegeben. Der folgende Code stoppt ein Sub. (Das zusätzliche "(" führt zu einem Formelfehler im Popup-Fenster)
Range("A1").Value = "=Sum((B2:B4)"
Der folgende Code funktioniert ohne Unterbrechung, obwohl er in Zelle A1 einen #NAME?-Fehler ausgibt.
Range("A1").Value = "=Sum(PotatoSalad)"
Ich habe auch einen kurzen Test mit einem Array von Zeichenfolgen durchgeführt. Das Speichern von Formeln in Zeichenfolgen innerhalb eines Arrays scheint das Problem der Codeunterbrechung zu umgehen, da die Formeln erst nach der Aktualisierung ausgewertet werden. Diese Frage geht detaillierter darauf ein, was passiert, wenn ein Array zum Einfügen von Formeln in Zellen verwendet wird. Kurz gesagt: Wenn Sie ein Variantenarray verwenden, werden die Formeln ausgewertet und das Sub-Array gestoppt.https://stackoverflow.com/questions/19238844/strange-behavior-when-assigning-a-vba-array-to-formulas-of-an-excel-range
Der folgende Code funktioniert, bis eine Neuberechnung der Zelle A1 erzwungen wird.
Dim MyArray(0 to 0) as String MyArray(0) = "=Sum((B2:B4)" Range("A1").Value = MyArray()
Das Übergeben desselben Arrays als Variante führt zu einem Laufzeitfehler.