2015-10-22 4 views
3

Я искал ответы уже некоторое время, но у меня все время возникают разные ошибки.Vba Loop через массив

я рабочий код:

Dim arkwyn As Variant 
arkwyn = Array(1, 2, 3, "stats-obl") 

For Each x In arkwyn 
.... 
Next 

Но мне нужно использовать аналогичный подход в более сложном листе. Кроме того, он должен быть быстрым, так как он станет частью более сложной процедуры обновления, которая постоянно отслеживает многие поля на листе.

Не могли бы вы взглянуть и помочь мне сделать это правильно?

Private Function RowNo(ByVal text1 As String) 
    RowNo = Columns(2).Find(text1, Lookat:=xlWhole).Row 
End Function 

Dim t1r As Variant 
Dim t1 As Integer 

t1r = Array("1.2", "1.3", "1.4", "1.5", "1.6.2", "1.8", "1.9", "1.13.1.1", _ 
"1.13.1.2", "1.13.2") 

For t1 = LBound(t1r) To UBound(t1r) 
    Select Case UCase(Cells(RowNo(t1), 3).Value) 
     Case "x" 
      Rows(RowNo(t1) + 1).Hidden = False 
     Case Else 
      Rows(RowNo(t1) + 1).Hidden = True 
    End Select 
Next t1 

Thx для ответа, я попытался дальше реализовать, и я создал н так:

Dim ColAn As Long   
ColAn = 4 
Dim YtQ1Ar As Variant  
Dim Y1q, rY1q As Long   


YtQ1Ar = Array("1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.7.1", "1.7.2", _ 
"1.7.3", "1.7.4", "1.7.5", "1.7.6", "1.7.7", "1.7.8", "1.7.9", "1.7.10", "1.7.11") 

    For Y1q = LBound(YtQ1Ar) To UBound(YtQ1Ar) 
     rY1q = RowNo(YtQ1Ar(Y1q)) 
     Rows(rY1q).Hidden = (UCase(Cells(RowNo("1."), ColAn).Value) <> "TAK") 
    Next Y1q 

Идея заключается в том, что значение ячейки должен отобразить определенное количество строк. Я продолжаю получать «Ошибка времени выполнения 91: переменная объекта или с переменной блока не установлена» Где я могу ошибиться?

+0

Какую ошибку вы получаете с кодом? –

+0

Ошибка времени выполнения 91, переменная объекта не установлена ​​.. – torin

ответ

2

EDIT - фиксированные типы и Rowno функция

'Return the row for a given value, or zero if not found 
Private Function RowNo(ByVal text1 As String) As Long 
    Dim f As Range 
    Set f = Columns(2).Find(text1, Lookat:=xlWhole) 
    If Not f Is Nothing Then 
     RowNo = f.Row 
    Else 
     RowNo = 0 
    End If 
End Function 

'... 
Dim t1r As Variant 
Dim t1 As Long, r As Long 

t1r = Array("1.2", "1.3", "1.4", "1.5", "1.6.2", "1.8", "1.9", _ 
      "1.13.1.1", "1.13.1.2", "1.13.2") 

For t1 = LBound(t1r) To UBound(t1r) 
    r = RowNo(t1r(t1)) 
    If r > 0 Then 
     Rows(r + 1).Hidden = (UCase(Cells(r, 3).Value)<>"X") 
    Else 
     Debug.Print "'" & t1r(t1) & "' was not found!" 
    End If 
Next t1 
'... 
+0

Я думаю, что нижняя половина этого должна быть завернута в Sub. – shg

+0

Да - я предполагаю, что ОП знает, что, так как они размещены без Sub/End sub. –

+0

Да, это другое Sub, я где-то читал, что должен стараться не использовать переменные Variant, можете ли вы сказать мне, адекватно ли в этом случае? И еще один вопрос относительно кода. Если мне нужно отобразить много строк в электронной таблице (что можно найти с помощью функции RowNo), как мне переписать код? – torin

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