我創建了以下子部分來簡單說明問題。我將活動工作表的範圍A2:E10分配給範圍變量。然後,到另一個範圍變量,我將此範圍的子範圍(單元格(1,1))分配給(3,3)。Excel vba:將範圍創建爲另一個範圍的子範圍時可能存在的錯誤
我會預期這將包括該範圍A2至C4(因爲A2是第一欄,較大範圍的第一行)。但是,當我調用每個範圍的第一個單元格的.Row方法時,我得到不同的結果:較大範圍r返回「2」,而較小範圍rSub返回「3」。
(該.Row方法返回的範圍內的絕對排它被要求)
我希望這兩個調用返回2,因爲他們都應該引用單元格A2。任何人都可以解釋爲什麼這不是這樣嗎?
*編輯:我剛纔已經改變了子,以便它調用每個範圍內的第一個單元格的.COLUMN方法,因爲它的.Row方法。正如您所預料的那樣,這將爲這兩個範圍返回「1」。
Sub test()
Dim r As Range
Set r = Range("A2:E10")
MsgBox r.Cells(1).Row '= 2
Dim rSub As Range
With r
Set rSub = .Range(.Cells(1, 1), .Cells(3, 3))
End With
MsgBox rSub.Cells(1).Row '= 3
End Sub
我發現,如果你之前的「細胞」,而不是「範圍」前的一個取出點,它也適用。我本以爲這樣做會強制vba使用屬於活動工作表的單元格,而不是r或rSub。 我想過了,我認爲它在計算範圍時使用了.Row和.Column值。因此對於rsub的.Cells(1,1),Row的值是2.範圍的開始也是2.所以它必須做一些類似於「CellRow - RangeStartRow + 1」的事情,因此它會出現3 – Swiftslide