2016-11-29 45 views
0

我是新来的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

什么是您要定义的范围内?从“B9”直到哪里?什么单元格是'Range(“B9”)。End(xlDown).End(xlToRight)'假设是?在我的答案下面的代码将运行没有错误(不知道你想要什么范围,但) –

+0

谢谢。我所指的范围基本上是一个存储在“员工数据”表中的数据库。 B9是左上方的单元格,我希望选择整个数据库,因此.End命令。目的是定义范围,以便可以进行搜索。 –

+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 
0

我假设你的意图是用代码来参考下你的床单员工数据Range("B9").End(xlDown).End(xlToRight)但你的代码是指ActiveSheet。 你会看到这个用下面的代码Debug.Print Range("B9").End(xlDown).End(xlToRight).Parent.Name因此,在类似的情况下,你必须像参考夏嘉曦一样。

相关问题