2014-01-28 30 views
0

當我使用Range1.Range2時,我用Range2擴展或縮小了Range1。在試圖回答一個問題時,我遇到了Range2與Range1沒有任何關係的用法。我認爲這將返回一個錯誤,但它返回了我不明白的地址。Range1.Range2返回奇怪的地址

該宏:

Sub Test() 

    Debug.Print Range("A2").Range("B1").Address 
    Debug.Print Range("B3").Range("B5").Address 
    Debug.Print Range("C4").Cells(10, 5).Address 
    Debug.Print Range("D5").Cells(10, 15).Address 
    Debug.Print Range("D5:F10").Cells(10, 15).Address 
    Debug.Print Cells(5, 6).Cells(12, 15).Address 
    Debug.Print "======" 
    ' Specifying the sheet does not seem to affect the result 
    Debug.Print Range("B3").Cells(15, 1).Address 
    Debug.Print ActiveSheet.Range("B3").Cells(15, 1).Address 
    Debug.Print Sheets("Sheet1").Range("B3").Cells(15, 1).Address 

End Sub 

產生以下輸出:

$B$2 
$C$7 
$G$13 
$R$14 
$R$14 
$T$16 
====== 
$B$17 
$B$17 
$B$17 

在我已執行此類型的所有測試中,它顯示爲:

Range1.Range2 

相當於:

Cells(Range1.Row + Range2.Row - 1, Range1.Column + Range2.Column - 1) 

我希望我不會遇到DOH時刻,但任何人都可以提供解釋?

我正在使用Excel 2003.其他版本的用戶是否從此宏獲得相同的輸出?

+3

當範圍應用於Range對象,屬性是相對於Range對象。例如,如果選擇單元格爲C3,則Selection.Range(「B1」)返回單元格D3,因爲它與Selection屬性返回的Range對象有關。 (來自[MSDN](http://msdn.microsoft.com/en-us/library/office/ff834676.aspx)) –

+0

@simoco感謝您的鏈接,我以前沒有遇到過。我將不得不嘗試將這種行爲理順爲自己。對我來說,它似乎是複製Offset對象的行爲。 –

+0

是的,你是對的!它們非常相似,即,範圍(「C3」)。範圍(「B1:C3」)。地址給出與範圍(「C3」)相同的結果偏移量(0,1).Resize(3,2)。地址' –

回答

4

如從MSDN如下:

當範圍應用於一系列對象,屬性是相對於所述範圍的對象。例如,如果選擇單元格爲C3,則Selection.Range(「B1」)返回單元格D3,因爲它與Selection屬性返回的Range對象有關。

而作爲@Tony注意到,中Range.Range行爲頗爲相似Offset.Resize,即Range("C3").Range("B1:C3").Address返回相同的地址Range("C3").Offset(0, 1).Resize(3, 2).Address - $D$3:$E$5