如果不首先选择工作表,则无法设置范围变量

时间:2016-11-29 08:59:41

标签: excel-vba variables vba excel

我是VBA编码新手和工作项目我不得不快速自学一些VBA。我正在尝试重写一些代码以避免尽可能频繁地使用.select命令。问题是当我将范围定义为变量然后尝试设置它时。

Dim SearchRng As Range

Set SearchRng = Sheets("Employee Data").Range("B9", Range("B9").End(xlDown).End(xlToRight))

运行此代码时的活动工作表不是“员工数据”表,我总是得到“运行时错误'1004':应用程序定义的错误或对象定义的错误”。

我发现如果我先选择“员工数据”表,然后设置范围,那么代码就可以了。即

Dim SearchRng As Range

Worksheets("Employee Data").Select
Set SearchRng = Range("B9",Range("B9").End(xlDown).End(xlToRight))

然而,这无法避免尝试避免使用.select命令。

任何人都可以解释为什么第一位代码不起作用,但第二位代码却起作用。

让我知道可能需要哪些其他信息来帮助解决这个问题(我是VBA的新手,因此不确定需要什么)。

2 个答案:

答案 0 :(得分:2)

我不确定您是否知道您尝试使用此行定义的RangeRange("B9", Range("B9").End(xlDown).End(xlToRight))

以下代码可以使用您想要定义的Range无误地运行,而且无需首先使用Select“员工数据”表。

Option Explicit

Sub DefineRange()

Dim SearchRng As Range

With Sheets("Employee Data")
    Set SearchRng = .Range(.Range("B9"), .Range("B9").End(xlDown).End(xlToRight))
End With

' for debug purposes
Debug.Print SearchRng.Address

End Sub

答案 1 :(得分:0)

我认为您的意图是使用下面的代码参考您的表格员工数据Range("B9").End(xlDown).End(xlToRight),但您的代码是指ActiveSheet。 您将看到以下代码Debug.Print Range("B9").End(xlDown).End(xlToRight).Parent.Name,因此,在这种情况下,您必须像Shai那样提及。