2013-11-28 6 views
0

Я хотел бы создать функцию, которая выполняет некоторые проверки и возвращает массив моему вызывающему суб. этот массив не может быть действительно создан в суб, а затем передан функции для манипуляции. Sub просто вызывает функцию, которая должна создать массив и вернуть его в sub. Это возможно?Имейте функцию Возвращать массив

Вот моя функция. первая строка, очевидно, неверна, но это идея того, что я хочу сделать.

Function rMMopened(1 to 1000)() As Long 

Dim r As Long, i As Long 
Dim ttd As Worksheet 
Dim lrttd As Long 

Set ttd = Sheets("Tasks_to_do") 

lrttd = ttd.Cells(Rows.count, 1).End(xlUp).Row 
ReDim rMMopened(1 To lrttd) 

i = 1  
For r = 2 To lrttd  
    If ttd.Cells(r, 10) = "Phase 2" Then   
     If InStr("MASTER", ttd.Cells(r, 4)) Then    
      rMMopened(i) = r 
      i = i = 1     
     End If   
    End If   
Next 

ReDim Preserve rMMopened(1 To (i - 1))  
End Function 

Благодаря

+0

Почему нельзя этот массив будет создан в 'Sub'? –

+0

ну, это «может», но было бы так чисто. Я предполагаю, что это либо не может быть сделано, либо просто проще сориентировать массив в sub? – user2385809

ответ

2

Как об этом:

Function rMMopened() As Long()  ' *** changed 

Dim Values() As Long    ' *** added 
Dim r As Long, i As Long 
Dim ttd As Worksheet 
Dim lrttd As Long 

Set ttd = Sheets("Tasks_to_do") 

lrttd = ttd.Cells(Rows.Count, 1).End(xlUp).Row 
ReDim Values(1 To lrttd)   ' *** changed 

i = 1 

For r = 2 To lrttd 

    If ttd.Cells(r, 10) = "Phase 2" Then 

     If InStr("MASTER", ttd.Cells(r, 4)) Then 

      Values(i) = r   ' *** changed 
      i = i = 1 

     End If 

    End If 

Next 

ReDim Preserve Values(1 To (i - 1)) ' *** changed 
rMMopened = Values     ' *** added 

End Function 
Смежные вопросы