我想在每个单元格 E2:E30 和 F2:F30 中插入复选框,其中每行的 E 列或 F 列中必须选中一个复选框。
答案1
就你的情况而言,使用选项按钮无疑是更好/更实用的解决方案。如果你需要模拟带有复选框的选项组,请参阅下文
选项组
手动方式:
- 插入组框(开发人员选项卡->插入->表单控件->组框) - 这是一个矩形,您可以在其中放置不同的选项按钮
- 将您需要的选项按钮放置在矩形中(开发人员选项卡->插入->表单控件->选项按钮)
- 选择组中的任一选项按钮并将其链接到您想要的单元格 - 在“格式控制”对话框中(右键单击后)或
=$E$1
在公式栏中简单输入。
此链接单元格现在将保存所按下的选项按钮的编号,在您的情况下,这可能是 1、2 或 3。您现在可以将其与任何其他功能相结合,例如INDEX/OFFSET/CHOOSE
。
VBA 方式
以下例程将在每个单元格旁边放置一个选项组:
私有 Const cStrPrefix 作为字符串 = “o_” 私有 Const cDblHorizontalSpacing As Double = 2 私有 Const cDblLabelWidth As Double = 40 私人 mWS 作为工作表 私有 mStrAddr 作为字符串 私有 mRngLink 作为范围 Private mVarLabels() 作为变体 私有 mIntCount 作为整数 公共子 subPlaceOptionGroupsInRange(rngLinks 作为范围,_ intNumberOfButtons 作为整数,_ ParamArray varLabels() 作为变体) Dim intOldCalcMode 作为整数 应用程序.ScreenUpdating = False intOldCalcMode = 应用程序.计算 应用程序.计算 = xlCalculationManual '初始化变量 设置 mWS = rngLinks.Worksheet mIntCount = int按钮数量 mVarLabels = varLabels 对于 rngLinks.Cells 中的每个 mRngLink mStrAddr = mRngLink.地址 子删除选项组 子地点选项组 子位置选项按钮 下一个 应用程序.计算 = intOldCalcMode 应用程序.ScreenUpdating = True 子目录结束 私有子类 subDeleteOptionGroup() Dim i 作为整数 出错时继续下一步 对于 i = 1 到 mIntCount mWS.OptionButtons(cStrPrefix & mStrAddr & "_" & i).删除 下一个 mWS.GroupBoxes(cStrPrefix 和 mStrAddr).删除 子目录结束 私人子子PlaceOptionGroup() Dim objGroupBox 作为 GroupBox 设置 objGroupBox = mWS.GroupBoxes.Add( _ mRngLink.Offset(, 1).Left,mRngLink.Top,_ (mIntCount + 2)* cDblHorizontalSpacing + _ mIntCount * cDblLabelWidth,_ mRngLink.高度) 使用 objGroupBox .字符.文本 = “” .名称 = cStrPrefix & mStrAddr .Display3DSading = True 结尾 子目录结束 私有子类 subPlaceOptionButtons() Dim i 作为整数 Dim objOptionButton 作为选项按钮 对于 i = 1 到 mIntCount 设置 objOptionButton = mWS.OptionButtons.Add( _ mRngLink.偏移(,1).左_ + i * cDblHorizontalSpacing + (i - 1) * cDblLabelWidth, _ mRngLink.Top,cDblLabelWidth,mRngLink.Height) 使用 objOptionButton .Characters.Text = mVarLabels(i - 1) .Display3DSading = True .名称 = cStrPrefix & mStrAddr & "_" & i .LinkedCell = mStrAddr 结尾 下一个 子目录结束
您可以通过运行“subPlaceOptionGroupsInRange Sheets("yourSheet").Range("E2:E30"), 3, "Label1", "Label2", "Label3" 来放置选项按钮
复选框
如果您想要 3 个复选框以类似选项组的方式链接,则需要为三个按钮/选项分别设置一个单元格/列。例如,单元格 A1、B1、C1 链接到属于一个组的 3 个复选框。为了实现互斥状态,您需要为每个选项按钮分配以下宏:
公共子子更改复选框() Dim cb 作为复选框 Dim rngTarget 作为范围 Dim intCol 作为整数 设置 cb = ActiveSheet.CheckBoxes(Application.Caller) 设置 rngTarget = ActiveSheet.Range(cb.LinkedCell) '防止取消选中 如果 rngTarget.Value = False 那么 rngTarget.Value = True 退出子程序 万一 '取消选择之前选中的复选框 对于 intCol = 1 到 3 如果 rngTarget.Column intCol 则 ActiveSheet.Cells(rngTarget.Row,intCol).值 = False 万一 下一 intCol 子目录结束