VBA:Worksheets对象的错误

时间:2014-09-26 23:46:33

标签: excel vba excel-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 个答案:

答案 0 :(得分: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属性,则需要该句点 - 在这种情况下,为了指示单元格位于工作表1上(没有句点,Cells属性将返回活动工作表上的单元格)

如果您想使用当前活动工作表中的单元格并访问工作表Sales,那么您可以这样做:

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

答案 1 :(得分:1)

首先,这条线不会起作用,除非"销售"是当前的活动表:

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)引用Sheet2。您应该使用工作表(" Sheet2")或工作表(2)