Jeder weiß an dieser Stelle können Sie etwas wie folgt ausführen, um eine Formel auf einen Bereich anzuwenden, und die Zellreferenzen auf der rechten Seite werden dynamisch aktualisiert:VBA: Verwenden von Array-Index in Position für die rechte Seite des Bereichs.Formel
Range("A1:A10").Formula = "=J2+M2"
Das ist nicht, was ich fragen. Ich versuche, einen Array-Index in die rechte Seite eines Range.Formula
übergeben und ich bekomme nicht die Ergebnisse, die ich begehre. Für den Anfang, hier ist mein Code und linke Seite funktioniert gut (mind Sie die xl.
aufgrund dieses von MS Access initiiert wird):
' Get the new amount of columns since new ones have been added
lastColumn = xl.Cells(1, xl.Columns.Count).End(xlToLeft).Column
' Create and array of the header names to quickly locate column number
cols = xl.Range(xl.Cells(1, 1), xl.Cells(1, lastColumn)).Value
' Apply the formulas
xl.Range(xl.Cells(2, xl.Match("FCode", cols, 0)), xl.Cells(lastRow, xl.Match("FCode", cols, 0))).Formula =
So viel gilt für den richtigen Bereich. Wenn ich "ASD"
, "=J2+M2"
auf die rechte Seite setze, aktualisiert es den korrekten Bereich. Das Problem kommt, wenn ich xl.Match(...)
auf der rechten Seite als Teil der Formel verwenden muss.
Zum Beispiel:
"=ISBLANK(" & xl.Range(xl.Cells(2, xl.Match("NCode", cols, 0)), xl.Cells(2, xl.Match("NCode", cols, 0))) & ")"
Gibt einen 1004: Application-defined or object-defined error
. Dies sollte =ISBLANK(K2)
, =ISBLANK(K3)
, etc.
im Anwendungsbereich zurückgeben.
nur eine einfache Referenzen, die =K2
, =K3
, etc
landet gleich dem Wert, der in der Zelle K2
gleich sollte. Zum Beispiel =14
und das gilt für den gesamten Bereich. Es wird nicht einmal die Werte in K3
, K4
, etc
zurückgeben. Dies ist die Formel, die dafür verwendet wird:
"=" & xl.Range(xl.Cells(2, xl.Match("PCode", cols, 0)), xl.Cells(2, xl.Match("PCode", cols, 0)))
Was mache ich falsch? Der Grund hierfür ist, dass die Spalte, auf die ich verweisen muss, sich auf Änderungen zwischen Berichten bezieht, der Kopfzeilenname jedoch gleich bleibt. Es könnte Spalte M in einem Bericht sein, aber Spalte Z in einem anderen. Bis jetzt habe ich For Loops
benutzt, aber sie sind langsam und wollen sie vermeiden.
'Debug.Print' Ihre ISBLANK() Formel sein sollte, und ich denke, Sie werden es nicht, was Sie erwarten. –
Warum verwenden Sie keine Variablen und füllen sie mit den verschiedenen Match-Ergebnissen? Dann müssen Sie nur die Variablen in die Formel einklinken und der Code wird viel einfacher zu beheben sein. – teylyn