excel - 为什么使用 Range.Resize 属性不会输出预期的 Address 属性值?
问题描述
我正在回答另一个问题,但在使用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
旁注:问题的原因是
Set Target = Target.Range(Target.Resize(1, 1).Address(False, False))
具体Set Target = Target.Range...
应该是Set Target = Me.Range...
或只是Set 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
右侧的5 列Column A
和.Column K
右侧的 5 列Column F
。
为什么会这样?
解决方案
这一行:
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
推荐阅读
- javascript - 从 Postman 中的 JSON 响应中提取名称包含“-”的字段
- android - 如何在 Kotlin 中将字符串文字中的变量相乘?
- excel - 如何在excel单元格或单词中只保留一个空格
- javascript - TypeError:instance.render 不是 React 中的函数
- sql - SQL - 在时间间隔内搜索分区的动态最小日期
- javascript - 我可以手动下载 Tauri 构建依赖项吗?
- python - Pandas - 根据数据框绘制数据框的索引
- pytorch - 自回归变压器和非自回归变压器之间的区别仅仅是解码器中的注意力掩码吗?
- string - 如何在同一字符的两次出现之间打印行?
- rxjs - Angular 9/rxjs:如何处理 switchMap 中抛出的错误?