【问题标题】:Adding a formula dynamically to an excel cell将公式动态添加到 Excel 单元格
【发布时间】:2015-08-04 03:17:02
【问题描述】:

有没有办法(VB?)将公式动态添加到 Excel 单元格

我有一个条件为真和假的单元格,它们根据复选框进行更改。

我还有另一个单元格,里面有一个公式。 如果未选中复选框,则应使用此公式。 如果复选框被选中,那么用户应该能够手动插入值(没有任何公式提示)。所以公式不应该在那里。

我正在考虑一种解决方案,如果未选中复选框,我会将公式添加到单元格中,然后如果选中复选框,则我将清除单元格。

如何做到这一点?我对excel编码和VBA不是很熟悉。

【问题讨论】:

    标签: vba excel checkbox


    【解决方案1】:

    你可以使用:

    if userform1.checkbox.checked = false then
    range("A1").formula = "=myformula"
    else
    range("A1").value = ""
    end if
    

    您需要将代码插入到用户窗体中的复选框单击或更改事件中,两者应该具有相同的效果,只需双击用户窗体中的复选框,它将带您进入单击事件或将单击替换为“更改”,希望这就是你想要实现的目标,干杯 PS。感谢@99moorem 的建议

    【讨论】:

    • 我不认为它是一个 UserForm 伴侣
    【解决方案2】:

    好的,您需要在 TRUE/FALSE 单元格上触发来执行下一个 VBA 代码, 右键单击工作表名称并单击“查看代码”并输入此代码:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A5:A5")) Is Nothing Then 'define adress of your True/Flase cell
     If Target.Cells.Value = False then
     Range("B5").formula = "=enter your formula" 'define adress for cell with formula aswell
     else 
     Range("B5").value = ""
     end if
    end if
    end sub
    

    【讨论】:

      【解决方案3】:

      如果你有一个经典的 Excel 复选框,你可以添加一个链接单元格,它是 True 或 False。

      在下面的代码中,您的链接单元格A1中,要使用公式的单元格B1中,需要使用的单元格由公式为空或填充C1

      您需要指定 Sheet_Name(可以是不同的)并将该代码直接放入 VBA 中的 Sheet “模块”(按 Alt+F11 并加倍- 单击带有链接单元格的工作表(在左侧面板中),然后根据您的规范粘贴和编辑)

      Private Sub Worksheet_Change(ByVal Target As Range)
      Dim LinkedCell As Range, _
          FormulaCell As Range, _
          ChangingCell As Range
      
      Set LinkedCell = Sheets("Sheet_Name").Range("A1")
      Set FormulaCell = Sheets("Sheet_Name").Range("B1")
      Set ChangingCell = Sheets("Sheet_Name").Range("C1")
      
      
      If Application.Intersect(Target, LinkedCell) Is Nothing Then
          'not in linked cell
      Else
          'in linked cell
          If LinkedCell.Value2 <> True Then
              'Unchecked
              ChangingCell.FormulaLocal = ChangingCell.FormulaLocal
          Else
              'Checked
              ChangingCell.FormulaLocal = vbNullString
          End If
      End If
      
      Set LinkedCell = Nothing
      Set FormulaCell = Nothing
      Set ChangingCell = Nothing
      
      End Sub
      

      【讨论】:

      • 问题是,工作表是从原始工作表动态创建的,然后工作表的名称不同。因此,如果我现在将此代码放在用作生成工作表的基本工作表的工作表模块上,那么名称将不正确。我想知道我是否可以通过 ActiveSheet.Range 选择当前活动的工作表,而不是 Sheets("Sheet_Name").Range?
      • 是的,你可以,即使它有点风险,因为它可能不是好的。床单的名字是不是无法预料?并且此代码必须放入特定的工作表中,因此最糟糕的情况是,您创建一个空工作表,其中包含有关您的约束的已编辑代码并复制它以使代码已经与新的代码一起到位。你的复选框也是自动生成的吗?
      • 是的,新工作表的名称很容易预测,它在工作表名称中添加了一个编号。整个工作表被复制,包括所有代码和复选框。所以新生成的工作表将在 VBA 中有一个 excel 对象,代码相同。
      • 好的,它会很适合你!如果您有任何问题,请告诉我! ;)
      • 谢谢,我通过混合您的答案和其他答案来实现它。我把你说得对了,因为它是最清楚的,你付出了很多努力并回答了 cmets,谢谢!
      猜你喜欢
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多