excel - 创建一个宏,该宏在定义的变量范围内选择/取消选择所有复选框
问题描述
该宏旨在查找主复选框 (application.caller) 的位置,然后选择该列中最多 14 行以下的所有复选框。我的工作表在其他地方有各种复选框,当前宏检查工作表中的所有复选框。我究竟做错了什么?
Sub SelectAll_Click()
'Select / Clear All macro
Dim xCheckBox As CheckBox, n As Variant, rng As Range, loc As Range, loc1 As Range
'Application.Caller.Name
n = ActiveSheet.CheckBoxes(Application.Caller).Name
With ActiveSheet
Set loc = ActiveSheet.CheckBoxes(Application.Caller).TopLeftCell
'Set loc1 = loc.Address
'MsgBox loc1
loc.Select
Set rng = Range(loc.Address, ActiveCell.Offset(13, 0))
MsgBox (rng.Address)
End With
For Each xCheckBox In Application.ActiveSheet.CheckBoxes
'MsgBox (xCheckBox.TopLeftCell.Address)
'With xCheckBox.Select
If Not Intersect(loc, rng) Is Nothing Then
If xCheckBox.Name <> Application.ActiveSheet.CheckBoxes(n).Name Then
' If Not Intersect(rngShp, rng) Is Nothing Then
xCheckBox.Value = Application.ActiveSheet.CheckBoxes(n).Value
End If
End If
'End With
Next
End Sub
解决方案
对于不是您单击的复选框的所有复选框,以下情况都是正确的。
If xCheckBox.Name <> Application.ActiveSheet.CheckBoxes(n).Name Then
xCheckBox.Value = Application.ActiveSheet.CheckBoxes(n).Value
End If
您需要另外检查是否xCheckBox.TopLeftCell
与您想要的范围相交rng
。因此,仅适用TopLeftCell
于范围内的所有其他复选框:
If xCheckBox.Name <> Application.ActiveSheet.CheckBoxes(n).Name And Not Intersect(xCheckBox.TopLeftCell, rng) Is Nothing Then
xCheckBox.Value = Application.ActiveSheet.CheckBoxes(n).Value
End If
最后,您的代码可能如下所示:
Option Explicit
Public Sub SelectAll_Click()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim MasterChkBox As CheckBox
Set MasterChkBox = ws.CheckBoxes(Application.Caller)
Dim MasterLocation As Range
Set MasterLocation = ws.CheckBoxes(Application.Caller).TopLeftCell
Dim Rng As Range
Set Rng = MasterLocation.Resize(RowSize:=14)
'MsgBox (Rng.Address)
Dim xCheckBox As CheckBox
For Each xCheckBox In ws.CheckBoxes
If xCheckBox.Name <> MasterChkBox.Name And _
Not Intersect(xCheckBox.TopLeftCell, Rng) Is Nothing Then
xCheckBox.Value = MasterChkBox.Value
End If
Next xCheckBox
End Sub
推荐阅读
- algorithm - Photoshop 的高光或阴影更改背后的算法是什么?
- java - 我想从 viewpager 中的片段中获取 EditText 的所有值并想在活动中使用它们?
- c# - 将属性和值添加到现有类 c#
- sql - 尝试将 FOR XML Path 与 except 一起使用
- rest - java.lang.ClassNotFoundException: org.apache.http.impl.conn.PoolingClientConnectionManager 同时使用resteasy进行来自EJB的rest客户端调用
- ios - 从终端运行 iOS 的 Ionic Cordova 无法正常工作
- python - PyCharm 自动完成不显示方法和类
- javascript - 带有jquery ui滑块的动态输入字段不起作用
- python - 我可以在 tkinter 中使用 rgb 吗?
- android - SDK工具Android Studio出错