为什么不wbk.wks.Range工作?它在我使用工作簿和工作表名称时有效

时间:2014-04-23 13:44:47

标签: vba excel-vba excel

我在宏的开头有以下定义

'Define This Workbook
Dim wbk As Workbook
Set wbk = ThisWorkbook

'Define Main Sheet
Dim wks As Worksheet
Set wks = Sheet2

我不明白为什么以下代码行不起作用。我收到错误消息"对象不支持此属性或方法"。

lastRow = wbk.wks.Range("B:B").Find("Timmar", [B1], , , xlByRows, xlPrevious).row

所以我必须编写以下代码行。他们工作:

wbk.Activate
wks.Activate
lastRow = Range("B:B").Find("Timmar", [B1], , , xlByRows, xlPrevious).row

你明白为什么我的原始方法不起作用吗?

1 个答案:

答案 0 :(得分:3)

正如我在上面的评论中所提到的,改变

wbk.wks.Range("B:B")

wks.Range("B:B")

wbkWorkbook对象,它确实不支持名为wks的属性。检查here
如果您要指定wks属于wbk,请使用以下内容:

Set wks = wbk.Worksheets("Sheet2")

此外,如果范围wks.Range("B:B")不包含Timmer值的单元格,那么您会收到运行时错误,因为您正试图获取.Row属性 unfound 单元格(当.Find的结果为Nothing时)。改为使用这个:

Dim rng As Range
Dim lastRow As Long

Set rng = wks.Range("B:B").Find("Timmar", wks.[B1], , , xlByRows, xlPrevious)

If Not rng Is Nothing Then
    lastRow = rng.Row
Else
    lastRow = 1 ' change to suit
End If