我在回答另一个问题时,在使用 Range.Resize(1, 1)
时遇到了意想不到的结果。
如果用户选择了超过 1 个单元格,我希望调整 Target
的 Worksheet_SelectionChange
属性的大小。具体来说,我打算将 Target
范围更改为所选范围的左上角单元格。
我注意到在测试时,调整大小的 Target
范围并不总是会产生预期的单元格,通常会导致列或行不在原始选择范围内。
测试代码如下;
- 输出到立即窗口,值为
<Target.Count> | <Target.Address>
- 将
Target.Resize(1, 1).Address(False, False)
的结果输出到立即窗口 - 将
Target.Resize(1, 1).Address(False, False)
的结果赋值给Target
- 将
<Target.Count> | <Target.Address>
的新结果输出到立即窗口
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Debug.Print Target.Count & " | " & Target.Address(False, False)
Debug.Print "Resize Address: " & Target.Resize(1, 1).Address(False, False)
Set Target = Target.Range(Target.Resize(1, 1).Address(False, False))
Debug.Print Target.Count & " | " & Target.Address(False, False)
End Sub
Side note: The cause of the issue is
Set Target = Target.Range(Target.Resize(1, 1).Address(False, False))
SpecificallySet Target = Target.Range...
should beSet Target = Me.Range...
or justSet Target = Range
.
考虑在工作表上进行以下选择;
Range("A1:C10)
和Range(C1:E10")
我期望测试代码的 Debug.Print
方法输出:
30 | A1:C10
Resize Address: A1
1 | A1
30 | C1:E10
Resize Address: C1
1 | C1
我得到的结果是:
30 | A1:C10
Resize Address: A1
1 | A1
30 | C1:E10
Resize Address: C1
1 | E1 '<~~~~~
虽然从 resize 属性返回的地址是 C1
,但范围设置为 E1
我注意到它似乎将新列设置在新目标列的右侧新目标列左侧的列数(即,如果我在工作表上选择 F1:F10
,它将调整大小为 K1
。Column F
是 Column A
右侧 5 列,Column K
是 Column F
右侧 5 列。
为什么会发生这种情况?
最佳答案
这一行:
Target.Range(Target.Resize(1, 1).Address(False, False))
正在现有范围内取一个范围。当该范围从 A1 开始时,.resize(1, 1)
的索引为 1,因此原始范围没有偏移。
当您从 C1 开始时,.resize(1, 1)
现在的索引为 3,该范围的相对索引为 C - 1、D - 2、E - 3。当您取它偏移 3 的范围,得到 E1。
Private Sub test()
Dim r As Range
Set r = Range("A1:E10")
Debug.Print r.Address, r.Resize(1, 1).Address, "Normal Resize"
Debug.Print r.Address, r.Range(r.Resize(1, 1).Address).Address, "Range offset resize"
Set r = Range("C1:E10")
Debug.Print r.Address, r.Resize(1, 1).Address, "Normal Resize"
Debug.Print r.Address, r.Range(r.Resize(1, 1).Address).Address, "Range offset resize"
End Sub
关于excel - 为什么使用 Range.Resize 属性不能输出预期的 Address 属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67402986/