Ans*_*Ans 2 excel vba excel-vba
以下方式访问行的单元格有什么区别:
Sub test6()
Dim wRange As Range
Set wRange = Range("B3:P10")
For Each aRow In wRange.Rows
'need to get this row's second column (B)
Cells(aRow.Row, 4).value = aRow.Cells(1, 2).Address
Cells(aRow.Row, 5).value = Cells(aRow.Row, 2).Address
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
我得到奇怪的结果,取决于范围.此外,我有一个更复杂的程序,使用这两种方法时也会产生不同的结果.
我稍微更改了您的过程并添加了Debug.Print注释的输出以更好地解释为什么这是预期的结果:
Option Explicit 'in the first line of your modules: Ensures you need to declare all variables
Sub test6()
Dim wRange As Range, aRow As Variant
Set wRange = Range("B3:P10")
For Each aRow In wRange.Rows
' Outputs of the first loop run:
Debug.Print aRow.Address ' $B$3:$P$3
Debug.Print aRow.Cells(1, 2).Address ' $C$3
Debug.Print Cells(aRow.Row, 2).Address ' $B$3
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
说明ː
aRow是$B$3:$P$3原始范围之外的一个子范围(),B3:P10它只包含一行(但不是你假设的工作表的整行)所以aRow.Cells(1, 2)引用第2列相对于aRow它是C因为范围是B从不开始的A.
Cells(aRow.Row, 2)与写入完全相同,ActiveSheet.Cells(aRow.Row, 2)并且相对于第2列引用的ActiveSheet是B因为工作表的范围是从A.
aRow.EntireRow.Cells(1, 2).Address将是相同的Cells(aRow.Row, 2).Address因为现在我们引用从列开始的整行A.
旁注:
我建议不要假设工作表并完全限定您的单元格/范围,以便始终查看单元格相对于哪个范围.
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |