2014-09-26 2 views
0

У меня есть строка кода, который устанавливает ссылку на диапазон:VBA: ошибки с Таблицах объекта

Dim rCheck As Range 
Dim lRow As Long 
lRow = Worksheets("Sales").Range("salesHeader").Row + 1 
Set rCheck = Range(Cells(lRow, 1), Cells(lRow, 3)).End(xlDown) 

Это работает без ошибок. Однако я хотел бы установить эту ссылку для диапазона на конкретном листе Sheet2 или «Sales». Когда я добавляю объект рабочих листов, я получаю ошибки, показанные ниже.

Set rCheck = Worksheets("Sales").Range(Cells(lRow, 1), Cells(lRow, 3)).End(xlDown) 

Ошибка выполнения '1004': приложения или объекта определенные ошибки

Set rCheck = Worksheets(Sheet2).Range(Cells(lRow, 1), Cells(lRow, 3)).End(xlDown) 

Ошибка выполнения '13': Несоответствие типа

ответ

2

Я думаю, что немного реструктуризации, и у вас будет решение. Вы эффективно хотите использовать «Sales», как WorkSheet действовать на, так что я думаю, что это лучше сделать с помощью With заявление так:

With Worksheets("Sales") 
    Set rCheck = .Range(.Cells(lRow, 1), .Cells(lRow, 3)).End(xlDown) 
End With 

Обратите внимание, что мы используем .Cells с периодом впереди. Это говорит о том, что мы хотим, чтобы Cells работал на листе, который мы используем в нашем операторе With. Подробнее об этом можно найти в документе documentation:

Помните, что период перед каждым вхождением свойства Cells. Период требуется, если результат применения предыдущего оператора With должен применяться к свойству Cells - в этом случае, чтобы указать, что ячейки находятся на листе один (без периода, свойство Cells вернет ячейки на активном листе) ,

Если же вы хотите использовать ячейки из активного листа и доступа листа Sales то вы можете сделать это:

With Worksheets("Sales") 
    Set rCheck = .Range(Cells(lRow, 1), Cells(lRow, 3)).End(xlDown) 
End With 
+2

Я редактировал свой ответ. Вы сказали, что у вас есть «.Cells», но я не вижу его, поэтому я добавил его :). Не стесняйтесь повторно редактировать его. – L42

+1

На самом деле я сделал это в то же время, когда вы это делали. В то же время я добавил другую возможность, которую OP искал (и увидел мою ошибку в первой версии) - спасибо. –

1

Во-первых, эта строка не будет работать, если «Продажи» не являются t он текущий активный лист:

Worksheets("Sales").Range(Cells(lRow, 1), Cells(lRow, 3)).End(xlDown) 

Вы можете попробовать

Worksheets("Sales").Range(Cells(lRow, 1).Address, Cells(lRow, 3).Address).End(xlDown) 

Во-вторых, вы не можете обратиться к Sheet2 с помощью Worksheets (Лист2). Вы должны использовать Рабочие листы («Лист2») или Рабочие листы (2)

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