我試圖回答this question當我遇到Excel中的一些奇怪的VBA行爲。我寫了一個非常簡單的子來證明這個問題:非連續範圍的奇怪單元格地址行爲:VBA
Sub debugAddresses(rng As Range)
Debug.Print "Whole range: " & rng.Address
Dim i As Long
For i = 1 To rng.Cells.Count
Debug.Print rng.Cells(i).Address
Next i
End Sub
我遍歷每個單元格在一個範圍對象並打印其地址,簡單吧?
debugAddresses Range("B2:B3")
' Result as expected:
' >> Whole range: $B$2:$B$3
' >> $B$2
' >> $B$3
然而,對於非連續的範圍,我得到一些奇怪的行爲:
debugAddresses Range("A1,B2")
' Strange behaviour when getting addresses of individual cells:
' >> Whole range: $A$1,$B$2
' >> $A$1
' >> $A$2
任何人都可以擺脫任何光線就這個嗎?具體爲爲什麼,Cells
對象可用於索引連續範圍,似乎只是擴展了第一個選中的Area
。
編輯:這可能是值得指出的是,使用通過實際的單元格區域對象For Each
循環給出了預期的結果*
Sub debugAddresses2(rng As Range)
Debug.Print "Whole range: " & rng.Address
Dim c As Range
For Each c In rng
Debug.Print c.Address
Next c
End Sub
* 見我的回答對一個評論對一個更強大的解決方案,因爲這(顯然)可能不總是給預期的結果
您正在使用非連續的範圍,所以'rng.Cells(ⅰ).Address'可能用於'rng.Areas(1).Cells(ⅰ).Address'的略寫。 –
這很奇怪,因爲如果你嘗試在這些單元上輸入一些數據。它實際上工作:rng.Cells =「測試」 – danieltakeshi
@FlorentB。 「可能是速記」基於什麼?有什麼文件呢?我也不這麼認爲,因爲'.Areas(1)'中沒有足夠的單元格,你會得到索引超出範圍... – Wolfie