短版的問題的遍歷`Cells`:在`Range`
這裏的代碼
Dim rng As Range
Set rng = Selection
Set rng = rng.Columns(1)
For Each cl In rng
cl.Select ' <-- Break #2
讓我這個在即時窗口中,如果選擇範圍A1:B37
? rng.address(External:=True)
[Book2]Sheet1!$A$1:$A$37
? cl.Address(External:=True)
[Book2]Sheet1!$A$1:$A$37
任何人都可以幫助我理解爲什麼cl -> A1:A37
而不是cl -> A1
? 請注意,我想象重寫代碼以獲得預期結果。但我想知道這個問題是什麼,並且可能會學到一些新的東西。這就是問題所在。
龍版的問題(如原貼):
我有一個子程序,從而選定(矩形)的工作範圍rng
。這裏的相關代碼如下所示。它根據rng
的列號ncols
分支。
當ncols=1
,它循環遍歷每個單元cl
在rng
,選擇cl
並執行一些動作。 當開始選擇A1:A37
,該工程確定,如通過在即時窗口輸出在歇進入循環後,右#1(見下面的代碼)
? rng.address(External:=True)
[Book2]Sheet1!$A$1:$A$37
? cl.Address(External:=True)
[Book2]Sheet1!$A$1
當ncols<>1
,我想循環遍歷每個單元cl
,第一列rng
,與以前一樣。 現在,當開始選擇A1:B37
,這是不行的,因爲在歇#2
? rng.address(External:=True)
[Book2]Sheet1!$A$1:$A$37
? cl.Address(External:=True)
[Book2]Sheet1!$A$1:$A$37
任何人都可以幫助我理解爲什麼在這裏cl -> A1:A37
代替cl -> A1
顯示在即時窗口輸出(如Break#1)? 請注意,我想象重寫代碼以獲得預期結果。但我想知道這個問題是什麼,並且可能會學到一些新的東西。這就是問題所在。
Dim rng As Range
Set rng = Selection
Dim ncols As Long
ncols = rng.Columns.Count
Dim cl As Range
' 1- If only one column is selected, ...
If (ncols = 1) Then
For Each cl In rng
cl.Select ' <-- Break #1
...
Next cl
' 2- If more than one column is selected, ...
Else
Set rng = rng.Columns(1)
For Each cl In rng
cl.Select ' <-- Break #2
Dim rng2 As Range
Set rng2 = Range(cl, cl.Offset(0, ncols - 1))
rng2.Select
...
Next cl
End If
當場(像往常一樣)。我不知道有''範圍''的''''''''。實際上,對* Range.Cells屬性*的Excel幫助令我感到困惑:「返回一個Range對象,它表示指定範圍內的單元格。」在我看來,它應該返回與調用者相同的對象... – 2014-10-01 17:14:36
如何通過測試(即,不檢查代碼)從「rng.Cells」中識別對象「rng」? – 2014-10-01 17:16:11
沒有必要忽略'rng'和'rng.Cells'之間的區別,但通過包含'.Cells',您明確指出了您要實現的迭代類型。這兩個對象應該是相同的,因爲'rng'和'rng.Cells'都代表整個區域。但是通過說'對於rng.Cells中的每個分支,你指定了*你想要怎麼迭代。 – 2014-10-01 17:17:54