2016-07-08 8 views
0

Ich habe eine Funktion, wo ich ein Array erstellen möchte, aber es mir nicht erlaubt, das Array innerhalb der Funktion ReDim.Ungültige ReDim in VBA-Funktion

Function engArray(rigStck As Variant) As Variant 
    'CREATE ENGINE ARRAY WITH #, USAGE DAYS AND USED? 
    If rigStck <> 0 Then 
     ReDim engArray(1 To rigStck, 2) 
     For n = 1 To UBound(engArray) 
      'engine numbering 
      engArray(n, 0) = n 
      'reset engine usage to 0 
      engArray(n, 1) = 0 
      engArray(n, 2) = 0 
     Next 
    Else 
     engArray(1, 0) = 0 
    End If 
End Function 
+3

Verwenden Sie eine temporäre Array 'Dim TmpArray() als variant' dann auf die Größe der temporären Array REDIM Sie wollen. Dann am Ende 'engarray = TmpArray' –

+0

Perfekt. Prost! – peetman

+1

Wie Scott die Lösung zur Verfügung stellte, ist der Grund, dass Ihre Funktion kein Array selbst ist, das redim – MatthewD

Antwort

0

Um ein multi-dimensionales Array zu redigieren, müssen Sie kreativ werden. Sie können die äußere Dimension nur von Natur aus neu definieren, so dass Sie etwas Ähnliches tun müssen. Wenn Sie es benötigen, auf 1 statt 0 starten wollen Sie es ein bisschen zwicken:

Public Function ReDimPreserve(aArrayToPreserve, nNewFirstUBound, nNewLastUBound) 'returns array with lbound starting at 0 and ending at designated amount 
    ReDimPreserve = False 
    'check if its in array first 
    If IsArray(aArrayToPreserve) Then 
     'create new array 
     ReDim aPreservedArray(nNewFirstUBound, nNewLastUBound) 
     'get old lBound/uBound 
     nOldFirstUBound = UBound(aArrayToPreserve, 1) 
     nOldLastUBound = UBound(aArrayToPreserve, 2) 
     'loop through first 
     For nFirst = LBound(aArrayToPreserve, 1) To nNewFirstUBound 
      For nLast = LBound(aArrayToPreserve, 2) To nNewLastUBound 
       'if its in range, then append to new array the same way 
       If nOldFirstUBound >= nFirst And nOldLastUBound >= nLast Then 
        aPreservedArray(nFirst, nLast) = aArrayToPreserve(nFirst, nLast) 
       End If 
      Next 
     Next 
     'return the array redimmed 
     If IsArray(aPreservedArray) Then ReDimPreserve = aPreservedArray 
    End If 
End Function