【问题标题】:Programmatically format a cell as a checkbox以编程方式将单元格格式化为复选框
【发布时间】:2015-01-15 17:01:30
【问题描述】:

我正在开发一个 Excel 插件,它将在构建工作簿之前从 Web 服务获取数据。

在示例工作簿中,作为要求的一部分,我得到了一些单元格是 1 或空的。 这些是SUMmed,结果存储在其他地方。

我不是特别喜欢这个,我正在想办法为这些字段使用复选框,但仍将单元格值保持为 1 或 0(用于选中和未选中)。

这给了我几个问题:

  1. 是否可以添加和配置复选框,以便选中它为关联单元格提供值 1,而取消选中它为关联单元格提供 0?
  2. 这可以在 Excel 插件中以编程方式完成吗?

利用我广泛的研究能力 (Google),我发现我可以添加一个复选框并将其与一个单元格相关联,以便选中/取消选中将单元格值设置为 TRUEFALSE。如果这是唯一的选择,我可能会处理它(叹气!)但是这可以通过插件中的 c# 代码来完成吗?

【问题讨论】:

    标签: c# excel checkbox excel-2010 excel-addins


    【解决方案1】:

    我发现这很有帮助。我改变了代码,以便可以将大量单元格指定为复选框,每个单元格都可以在保持基础值的同时被勾选:

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    
    Dim TickBoxes As Range
    
    'Specify the range of cells you want to be tickboxes
    
    Set TickBoxes = Union(Range("A1"), Range("B2:D8"), Range("E9:G15")) 'etc
    
    If Intersect(TickBoxes, Target) Is Nothing Then Exit Sub
    
    Target.Font.Name = "Marlett"
    Cancel = True
    
    If Target.Value = 1 Then
        Target.Value = 0
        Target.NumberFormat = ";;;"
    Else
        Target.Value = 1
        Target.NumberFormat = Chr(34) & "a" & Chr(34) & ";;;"
    End If
    
    End Sub
    

    没那么聪明,但希望对某人有用!

    艾伦·K

    【讨论】:

      【解决方案2】:

      这是一个使用单元格 B9

      的示例

      它是使用双击而不是单击

      实现的

      在工作表代码区输入以下事件宏:

      Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
          Dim B9 As Range
          Set B9 = Range("B9")
          If Intersect(B9, Target) Is Nothing Then Exit Sub
          B9.Font.Name = "Marlett"
          Cancel = True
          If B9.Value = 1 Then
              B9.Value = 0
              B9.NumberFormat = ";;;"
          Else
              B9.Value = 1
              B9.NumberFormat = Chr(34) & "a" & Chr(34) & ";;;"
          End If
      End Sub
      

      双击 B9 将切换检查。

      因为是工作表代码,所以非常容易安装和自动使用:

      1. 右键单击 Excel 窗口底部附近的选项卡名称
      2. 选择查看代码 - 这将打开一个 VBE 窗口
      3. 粘贴内容并关闭 VBE 窗口

      如果您有任何疑虑,请先在试用工作表上进行尝试。

      如果您保存工作簿,宏将与它一起保存。 如果您使用的是 2003 年以后的 Excel 版本,则必须保存 文件为 .xlsm 而不是 .xlsx

      要删除宏:

      1. 如上所示打开 VBE 窗口
      2. 清除代码
      3. 关闭 VBE 窗口

      要了解有关宏的更多信息,请参阅:

      http://www.mvps.org/dmcritchie/excel/getstarted.htm

      http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

      要了解有关事件宏(工作表代码)的更多信息,请参阅:

      http://www.mvps.org/dmcritchie/excel/event.htm

      必须启用宏才能正常工作!

      注意:

      可以使用标准的左键单击来实现事件,但代码要多一些。

      【讨论】:

      • Arg 我希望避免使用宏 - 谢谢,我会试试看 :)
      • 请原谅我的愚蠢 - 这如何使我能够使用复选框?
      • 它既不是 Forms 类型的 CheckBox,也不是 ActiveX 类型的 CheckBox。它是一个格式化为看起来像 CheckBox 的单元格。单元格将显示被选中或为空,但实际上具有值 01
      • 哇。这令人印象深刻!如果我可以从 C# 代码中以某种方式将宏插入电子表格,我肯定会使用它:s
      猜你喜欢
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 2018-07-23
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 2010-12-10
      相关资源
      最近更新 更多