2015-08-25 3 views
0

Следующий фрагмент кода дает мне «Переменная объекта или переменная блока не установлена» ошибкавремени выполнения «91» ... пытается индексировать несколько столбцов

cIndx = wsMain.Range(Cells(i, begCol), Cells(i, endCol)).Find("Churn", MatchCase:=True, LookIn:=xlFormulas, Lookat:=xlWhole) 
If Not cIndx Is Nothing Then 
    If wsMain.Cells(i, statusCol) = "Active" Then 
     wsMain.Cells(i, cIndx.Column) = " " 
    End If 
End If 

Первая строка является виновником. Мои исследования пока показывают, что это связано с тем, как я индексирую Range, но официальная документация говорит, что я пытаюсь сделать это. Я просмотрел все сообщения, которые я мог найти здесь, с тем же названием, что и у меня, но ни один из них, по-видимому, не применим непосредственно к моей ситуации. Любые идеи очень ценятся. Счастливый опубликовать окружающий код, если больше контекста полезно.

Также любопытно, смогу ли я это сделать:

With wsMain 
    cIndx = .Range(Cells(i, begCol), Cells(i, endCol)).Find("Churn", MatchCase:=True, LookIn:=xlFormulas, Lookat:=xlWhole) 
    If Not cIndx Is Nothing Then 
     If .Cells(i, statusCol) = "Active" Then 
      .Cells(i, cIndx.Column) = " " 
     End If 
    End If 
End With 

Урожайность ту же ошибку, как указано выше

ответ

1

В обычный модуль кода, Cells() без квалификационного листа всегда будет ссылаться на ActiveSheet, так что вам нужно чтобы квалифицировать эти вызовы. Также необходимо использовать Set при присвоении значения переменной типа объекта.

Set cIndx = wsMain.Range(wsMain.Cells(i, begCol), wsMain.Cells(i, endCol)).Find(_ 
       "Churn", MatchCase:=True, LookIn:=xlFormulas, Lookat:=xlWhole) 
If Not cIndx Is Nothing Then 
    If wsMain.Cells(i, statusCol) = "Active" Then 
     wsMain.Cells(i, cIndx.Column) = " " 
    End If 
End If 
+0

Критической части я пропускал использовал набор для присвоения значения to cIndx. Большое спасибо за это! – lajulajay

1

Поскольку cindx является диапазон Я думаю, вы обнаружите, что синтаксис должен быть:

Set cindx = .Range(Cells(i, begCol), Cells(i, endCol)).Find("Churn", MatchCase:=True, LookIn:=xlFormulas, Lookat:=xlWhole)` 

это работает для меня

+0

Это на самом деле работает в любом случае, но квалификация ячеек может быть более безопасной, на мой взгляд, в случае случайного открытия другого рабочего листа. Однако оцените усилия. – lajulajay

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