2017-04-01 6 views
1

Ich versuche, einen Vektor in VBA mit einer for-Schleife zu erstellen. Mein Problem ist, dass VBA mir nicht erlaubt, eine andere Gleichung für die erste Vektorkoordinate zu haben. Beim Versuch, es zu laufen bekomme ich „erwartetes Array“ als FehlermeldungFor-Schleife VBA-Vektoren

'radius calculations 
r(1) = (al * Log(al)/(al - 1)) * rb ' middle radius of block 1, trying to calculate first entry 
'in r-vector, since this equation is different from the rest 
r_m(1) = rb 'r_i-1/2 i=1 

For i = 2 To n_r 
    r(i) = al * r(i - 1) ' r_i 
    r_m(i) = (r(i) - r(i - 1))/(Log(r(i)/r(i - 1))) 
Next i 

al und rb als Doppel (Public Const) definiert, während r als String definiert ist. Ich habe nur Matlab in der Vergangenheit, und nur Intro Führer zu VBA (VBA für Dummies etc.)

schätzen Ihre Hilfe in der Sache

E

+0

Sie schreiben Sie erklärte 'r' als eine Zeichenfolge. Aber 'r (1)' oder 'r (i)' beziehen sich auf ein Array. –

+0

r sollte von einem numerischen Datentyp sein, z. Double, für die Indexierung müssen Sie es als Array deklarieren, wie: Dim r (1 bis 5) als Double – z32a7ul

Antwort

2

VBA nicht behandeln Strings, die die lesen Genauso behandelt es Arrays (wie Sie es in anderen Sprachen sehen würden). r(1) sieht aus wie Array-Syntax zu VBA (as can be seen here); Daher wird es zu einem Fehler führen, wenn es als String deklariert wird.

im Wesentlichen So wird VBA r(1) Interpretation zu verstehen: „Ich habe ein benanntes Array r und ich möchte 1 etwas in Elementnummer speichern“. Aber stattdessen versucht es dies mit einer unveränderlichen Zeichenkette.

Die Split Funktion kann verwendet werden, um eine Zeichenfolge in ein Array zu verwandeln, wenn Sie das brauchen.

Dennoch ist es am besten, wenn Sie gerade declare an array für Ihre Vektormathematik.

Dim myArray() As Double 
Dim myArray2(10, 10, 10) As Double 

The ReDim keyword kann eine Anordnung, auch innerhalb einer for-Schleife, um die Größe verwendet werden. (Vergessen Sie nicht ReDim Preserve, wenn Sie sicherstellen müssen, dass der Inhalt während dieses Vorgangs nicht gelöscht wird).