代码从工作表移动到模块时出现VBA Excel错误

时间:2012-11-28 06:17:51

标签: vba excel-vba excel-2007 excel

我有一个包含多个标签的Excel文件。我有一个工作表,其中包含一些工作正常的代码。此代码还引用某些“主”选项卡上的数据。我需要复制这个表,所以我将常用功能从那里移到了一个模块。现在,我在尝试访问同一工作表上的范围时收到VBA 1004错误。

 Dim selectedRange As Range
 Set selectedRange = Worksheets(name).Range("A1", _
 Range("A" & Rows.count).End(xlUp)) 'Error Line

此代码工作正常,直到我将其移动到模块。如果我放一个

就可以了
Worksheets(name).Select 

之前,但我必须做太多次。基于此查询:VBA error 1004 - select method of range class failed 没有.Select,代码应该可以正常工作。只要代码在工作表中,它就会发生。为什么将代码移动到模块会产生问题?

2 个答案:

答案 0 :(得分:1)

使用不带对象限定符的范围和行属性。在没有对象限定符的情况下使用时,此属性是 ActiveSheet.Range / ActiveSheet.Rows的快捷方式。

所以代码执行此操作:

Worksheets(Name).Range("A1", ActiveSheet.Range("A" & ActiveSheet.Rows.Count).End(xlUp))

但是,工作表(名称)可能与活动工作表不同,因此更好:

Worksheets(Name).Range("A1", Worksheets(Name).Range("A" & Worksheets(Name).Rows.Count).End(xlUp))

With With-End With block:

With Worksheets(name)
      Set selectedRange = .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
End With

因此确保Range / Rows属性应用于Worksheets(name)工作表对象。

答案 1 :(得分:0)

当您在工作表上执行操作时,您实际上不需要对该工作表进行显式声明。

但是,在处理模块并与其他工作表交互时,您需要指定要使用的工作表。因此选择表格,然后才能选择范围。要说,在你选择孩子之前选择父母:) 请注意,以下只是逻辑解释。不是确切的代码语法。

因此,我建议您创建以下工作表变量,并将您需要的工作表对象设置为该变量。

e.g。

Dim WS as Worksheet
Dim selectedRange As Range

Set WS = Sheets("Shee1")
Set selectedRange = WS.Range("A1", _
Range("A" & Rows.count).End(xlUp)) 'Error Line

否则,如果您想引用所有工作表,您可以使用每个工作表的索引

E.g。 ThisWorkBook.Sheets(i) 'i is an integer 然后循环或任何它认为你的程序结构。

此外,您不必在工作表上使用Select指向该工作表中的范围。根据上面的代码,您可以设置工作表并设置您需要处理的范围。优化VBA执行时,select通常是禁忌。此外,Excel 2007不会像旧版本那样保留活动工作表。