2013-10-07 5 views
0

Я пытаюсь определить номер столбца заголовка в таблицу Excel, используя следующий VBA код:Excel VBA объект типа переменной несовпадение

Dim aCell As Range 
Set aCell = Sheet1.Rows(1).Find(What:="ContractDescription", LookIn:=xlValues, _ 
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
MatchCase:=False, SearchFormat:=False) 

Затем следующая строка кода выдает ошибку:

MsgBox (aCell.Column) 

Дает ошибку времени выполнения 91: «Объектная переменная или с переменной блока не установлена».

Согласно сообщениям, которые я прочитал в Интернете, эта ошибка возникает, когда вы пытаетесь присвоить значение одного типа переменной, которая была объявлена ​​как другой тип.

Однако, я пытаюсь понять, почему я получаю эту ошибку здесь, так как aCell является объектом диапазона, и я просто принимать aCell.Column, но когда я делаю Range("A1").Column я получить действительные 1 напечатанные на экране.

Так что может быть причиной проблемы здесь?

+0

Вы также хотите видеть [это] (http://www.siddharthrout.com/2011/07/14/find-and-findnext-in-excel-vba/) –

ответ

2

Причина, по которой вы получаете эту ошибку, состоит в том, что aCell имеет значение null (матч не найден). Перед использованием диапазона от Find метода (или эквивалент, где диапазон может быть Nothing), вы должны установить условие на линии:

If (Not aCell Is Nothing) Then 
    MsgBox aCell.Column 
End If 
+0

+ 1 Spot On: -) –

+0

@SiddharthRout спасибо :) – varocarbas

+0

Но так как aCell ничего, MsgBox не выполняется - как я могу запустить MsgBox? – Aaa

3

Если .Find не удается, то вернется & установить aCell в Nothing так попытка получить доступ к любому члену экземпляра, например .Column, приведет к повышению этой ошибки.

Для защиты от этого;

if not aCell Is Nothing 
    MsgBox aCell.Column 
else 
    MsgBox "not found" 
end if 
+0

+ 1 Пятно на :-) –

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