【问题标题】:VBA: errors with Worksheets object [duplicate]VBA:工作表对象错误[重复]
【发布时间】:2014-11-22 01:41:40
【问题描述】:

我有一行代码设置范围的引用:

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 或“销售”上的范围设置此参考。添加工作表对象时出现错误,如下所示。

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”: 类型不匹配

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    我认为进行一些重组,您就会找到解决方案。您实际上想使用“销售”作为要采取行动的工作表,所以我认为最好使用这样的 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
    

    【讨论】:

    • 我编辑了你的答案。你说你有.Cells 但我没看到所以我添加了它:)。不过,请随意重新编辑。
    • 事实上我在你做的同时做了。同时,我添加了 OP 正在寻找的另一种可能性(并在第一个版本中看到了我的错误)-谢谢。
    【解决方案2】:

    首先,除非“销售”是当前活动表,否则此行将不起作用:

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

    你可以试试

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

    其次,您不能使用 Worksheets(Sheet2) 引用 Sheet2。您应该使用 Worksheets("Sheet2") 或 Worksheets(2)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多