2016-11-29 92 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因此,在類似的情況下,你必須像參考夏嘉曦一樣。

相關問題