excel - 使用 VBA 操作 Range.Adress 值
问题描述
场景:我正在使用一个代码(连同其他东西)让我获得 xlR1C1 格式的工作表中复选框的位置。
目标:由于我必须操纵该值来执行其他操作,因此我试图将该地址转换为我可以使用的可用值对(行和列)。
我已经尝试过的方法:以一种复杂的方式,我能够将地址读取为字符串并执行多个操作来提取两个数字(使用拆分、左等)。
问题:是否有更好/更有效的方法来执行此操作?
代码:获取复选框位置,并从地址中获取第一个值(行号):
Sub getControlValues()
Dim cb As Shape
Dim i As Long
i = 1
'Loop through Form Checkboxes
For Each cb In ThisWorkbook.Sheets(1).Shapes
If cb.Type = msoFormControl Then
If cb.FormControlType = xlCheckBox Then
If cb.ControlFormat.Value = xlOn Then
ThisWorkbook.Sheets(3).Cells(i, 1).Value = "X"
ThisWorkbook.Sheets(3).Cells(i, 2).Value = cb.Name
ThisWorkbook.Sheets(3).Cells(i, 3).Value = cb.BottomRightCell.Address(, , xlR1C1)
ThisWorkbook.Sheets(3).Cells(i, 4).Value = Split(ThisWorkbook.Sheets(3).Cells(i, 3), "C")
'ThisWorkbook.Sheets(3).Cells(i, 4).Value = cb.Type
ElseIf cb.ControlFormat.Value = xlOff Then
ThisWorkbook.Sheets(3).Cells(i, 1).Value = ""
ThisWorkbook.Sheets(3).Cells(i, 2).Value = cb.Name
ThisWorkbook.Sheets(3).Cells(i, 3).Value = cb.BottomRightCell.Address(, , xlR1C1)
ThisWorkbook.Sheets(3).Cells(i, 4).Value = Split(ThisWorkbook.Sheets(3).Cells(i, 3), "C")
End If
i = i + 1
End If
End If
Next cb
End Sub
Obs:我知道如何在工作表中轻松执行此过程,也可以使用宏记录器来执行此操作,但我的目标是为此找到更好的解决方案。
解决方案
只需使用Range.Row
和Range.Column
?(例如cb.BottomRightCell.Row
)
If cb.ControlFormat.Value = xlOn Then
ThisWorkbook.Sheets(3).Cells(i, 1).Value = "X"
ThisWorkbook.Sheets(3).Cells(i, 2).Value = cb.Name
ThisWorkbook.Sheets(3).Cells(i, 3).Value = cb.BottomRightCell.Address(, , xlR1C1)
'ThisWorkbook.Sheets(3).Cells(i, 4).Value = Split(ThisWorkbook.Sheets(3).Cells(i, 3), "C") 'Nope!
ThisWorkbook.Sheets(3).Cells(i, 4).Value = cb.BottomRightCell.Row ' Tada!
(从“您是否有理由不使用它?” 对完整答案的评论,以便可以将问题标记为已回答 - 显然原因是“糟糕”)
推荐阅读
- amazon-web-services - 在 CloudWatch 中记录 python 日志的 Watchtower 配置
- modal-dialog - 使用模态在 Slack 中构建重复事件的最佳方法是什么?
- php - 当两侧为真时 Xor 返回真 - PHP
- graphql - GraphQL Playground 的键盘快捷键
- ignite - 如何使用动态提供的 IP 在集群中设置 apache ignite 节点
- angular - Angular - 谷歌分析自定义事件
- pcf - 错误完成失败,出现异常#
将
Spring Boot & SOAP
项目部署到Pivotal Clo
- linux - jenkins 上的 CI 管道覆盖率
- c# - 如果解析失败,如何将十进制变量设为 0?
- javascript - 使用 Mutation hook 更新 Graphql 服务器中的数据