2016-07-08 2 views
0

У меня есть функция, где я хотел бы создать массив, но он не позволяет мне ReDim массив внутри функции.Недопустимый ReDim в функции VBA

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

Используйте временный массив 'Dim TmpArray(), как variant' затем ReDim массив Темп до размера вы хотите. Затем в конце 'engarray = TmpArray' –

+0

Perfect. Ура! – peetman

+1

Как Скотт предоставил решение, причина в том, что ваша функция не является массивом, который может быть удален – MatthewD

ответ

0

Чтобы переделать многомерный массив, вам нужно проявить творческий подход. Вы можете только изменить внешний размер по своей сути, поэтому вам нужно будет сделать что-то похожее на это. Если вам это нужно, чтобы начать на 1 вместо 0 Вы хотите, чтобы настроить его немного:

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 
Смежные вопросы