2013-05-06 67 views
0

我一直在盯着這段代碼這麼久,我想我錯過了很簡單的事情。這一聲明的目的是設置「lastRowCompass」可變(範圍)作爲該塔的第一個空單元格:VBA:爲什麼我的範圍偏移返回0(或空)?

Set lastRowCompass = Cells(Rows.Count, 2).End(xlUp).Offset(1, 0) 

一旦變量設置,我想用它在一個循環像這樣:

For i = lastRowCompass To Range("D" & Rows.Count).End(xlUp).Row 
If ActiveSheet.Cells(i, 4) <> "" Then 
    Cells(i, 4).Offset(0, -2) = hireDate 
End If 
Next 

該變量被聲明爲一個範圍,所以這是非常混亂的。當我遍歷代碼時,即使在執行set語句之後,i = 0。有沒有人有什麼建議?我看過的所有例子都沒有幫助我解決問題。非常感謝!

編輯:我也試過這條線:

Set lastRowCompass =Range("B1").End(xlDown).Offset(1, 0) 

這行:

Set lastRowCompass = Range("B" & Rows.Count).End(xlDown).Offset(1, 0) 

但我有同時與相同的結果。

回答

3

For i =你必須有一個整數,但你傳遞的範圍。 (偏移返回一個Range對象,所以你lastRowCompass不是一個整數,它是一個範圍)

我認爲程序無法完全按照你喜歡的方式將Range轉換爲整數。

嘗試使用For i = lastRowCompass.Row或另一個起始值。


如果我可能會建議,請始終在代碼文件頂部使用Option Explicit。 這將要求你聲明所有變量(少量額外的編碼),但可以幫助避免一些奇怪的分配。

+1

在錢上。如果你在立即窗口調試'lastRowCompass',你會看到一個值爲「0」,這是該範圍變量的正確「值」 - 它是一個空單元格(它應該是基於什麼OP正在試圖去做)。如果這不是1x1的範圍,它會拋出一個「不匹配」錯誤。 – 2013-05-06 18:36:13

+0

謝謝你的幫助!我改變了'For i = lastRowCompass'爲'For i = lastRowCompass.Row',它完美的工作!我實際上在我的代碼頂部使用了「Option Explicit」(它只是在示例中未顯示)。 – ARich 2013-05-06 18:53:08