我是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的新手,因此不确定需要什么)。
答案 0 :(得分:2)
我不确定您是否知道您尝试使用此行定义的Range
:
Range("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那样提及。