gpt4 book ai didi

vba - 访问行单元格的两种方式之间的差异

转载 作者:行者123 更新时间:2023-12-03 00:20:55 25 4
gpt4 key购买 nike

以下方式访问行单元格有什么区别:

   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

根据范围,我得到了奇怪的结果。此外,我有一个更复杂的程序,使用这两种方法时也会给出不同的结果。

最佳答案

我稍微改变了你的程序并添加了 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

说明ː
aRow是原始范围 $B$3:$P$3 之外的子范围 ( B3:P10 )仅包含一行(但不是您假设的工作表的整行),因此 aRow.Cells(1, 2)指相对于 aRow 的第 2 列这是 C因为范围是从 B 开始的不与 A .

Cells(aRow.Row, 2)与写 ActiveSheet.Cells(aRow.Row, 2) 完全相同并指相对于 ActiveSheet 的第 2 列这是 B因为工作表的范围从 A 开始.

aRow.EntireRow.Cells(1, 2).AddressCells(aRow.Row, 2).Address 相同因为现在我们引用从 A 列开始的整行.

旁注:
我建议不要假设工作表并完全限定您的单元格/范围,以便您始终看到单元格相对于哪个范围。

关于vba - 访问行单元格的两种方式之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44255677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com