Ich versuche, Formeln in einer Tabulator-getrennte Textdatei in einen Bereich in einem Arbeitsblatt geladen zu laden. Ich habe die Funktion Split(Expression As String, Delimiter)
verwendet, um jede Zeile nacheinander in ein 1D-Array zu laden, habe aber Probleme bezüglich des zurückgegebenen Array-Typs festgestellt.Wie konvertiert man String-Array zu Variant-Array - Excel VBA
Die Split-Funktion gibt nur Arrays vom Typ String zurück, und ich brauche ein Array vom Typ Variant, um den Bereich auf zu setzen. Dies liegt daran, dass beim Festlegen der Formeln von Zellen mithilfe eines Array vom Typ "Zeichenfolgen" die Zellenwerte auf den unformatierten Text festgelegt werden, selbst wenn die Zeichenfolgen mit einem Gleichheitszeichen beginnen.
'Example code to demonstrate the problem:
Sub Tester()
Dim StringArr(1 To 3) As String
StringArr(1) = "= 1"
StringArr(2) = "= 2"
StringArr(3) = "= 3"
Range("Sheet1!$A$1:$C$1").Formula = StringArr
'Cells display raw string until edited manually
Dim VariantArr(1 To 3) As Variant
VariantArr(1) = "= 1"
VariantArr(2) = "= 2"
VariantArr(3) = "= 3"
Range("Sheet1!$A$2:$C$2").Formula = VariantArr
'Cells display formula result correctly
End Sub
Resultierende Ausgabe:
Ich mag würde wissen, ob es einen Weg gibt, um das Array von der zurück Split
Funktion einer Variante Typ Array, vorzugsweise ohne Schleifen zu konvertieren. Mir ist bewusst, dass ich jede Zellenformel individuell innerhalb einer Schleife einstellen kann, aber ich versuche, sie so effizient und sauber wie möglich zu halten.
Ich verwende Microsoft Excel für Mac 2011, Version 14.5.5. VBA treibt mich die Mauer hoch.
Sie können sie immer nur einzeln oder mit einer Schleife einfügen, und es wird funktionieren; versuche 'Range (" Sheet1! $ A $ 1 "). Formula = StringArr (1)' Ich weiß nicht warum. –
Ich denke, es hat damit zu tun, dass Zellen im Excel-Arbeitsblatt vom Variant-Typ sind, und indem man das ganze Array auf einmal setzt, werden die Zellen in Zeichenkettentypen gezwungen, so dass sie dem Array entsprechen. Dies bleibt so lange bestehen, bis sie wieder bearbeitet werden und sie dann in den Variantentyp zurückversetzt werden.Eine andere Methode Wenn das String-Array groß ist, würde man das String-Array durchlaufen und die Werte in ein variantes Array setzen und dann zuweisen. Oder, wenn das String-Array klein ist, dann wie oben beschrieben durchschleifen und die Formel individuell zuweisen. –
@ScottCraner Ja, das macht Sinn - es sieht so aus, als würde ich mich an eine der Methoden halten, die du vorhin vorgeschlagen hast. Weißt du, ob es eine Möglichkeit gibt, den Typ des Arrays auf einmal zu ändern? –