Vba 将公式动态添加到excel单元格

Vba 将公式动态添加到excel单元格,vba,excel,checkbox,Vba,Excel,Checkbox,是否有方法(VB?)将公式动态添加到excel单元格中 我有一个条件为真和假的单元格,它们根据复选框而变化 我还有一个细胞,里面有一个公式如果复选框未选中,则应使用此公式。 如果复选框被选中,那么用户应该能够手动插入值(没有任何公式提示)。因此公式不应该存在 我正在考虑一个解决方案,如果复选框未选中,我会将公式添加到单元格中,然后如果复选框已选中,则我会清除单元格 这怎么可能呢?我不太熟悉excel编码和VBA。您可以使用: if userform1.checkbox.checked = fal

是否有方法(VB?)将公式动态添加到excel单元格中

我有一个条件为真和假的单元格,它们根据复选框而变化

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

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

这怎么可能呢?我不太熟悉excel编码和VBA。

您可以使用:

if userform1.checkbox.checked = false then
range("A1").formula = "=myformula"
else
range("A1").value = ""
end if
您需要将代码插入到userform复选框单击或更改事件中,两者都应该具有相同的效果,只需双击userform中的复选框,它将带您进入单击事件或将单击替换为“更改”,希望这就是您想要实现的,干杯
PS.谢谢@99moorem的建议

好的,您需要在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

如果您有一个经典Excel复选框,您可以添加一个链接单元格,该单元格将为True或False

在下面的代码中,您的链接单元格位于
A1
中,带有要使用的公式的单元格位于
B1
中,需要使用公式清空或填充的单元格位于
C1

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

Private子工作表\u更改(ByVal目标作为范围)
Dim LinkedCell作为范围_
公式化单元格作为范围_
改变细胞As范围
设置LinkedCell=工作表(“工作表名称”)。范围(“A1”)
Set FormulaCell=图纸(“图纸名称”)。范围(“B1”)
设置更改单元格=工作表(“工作表名称”)。范围(“C1”)
如果Application.Intersect(Target,LinkedCell)什么都不是,那么
'不在链接单元格中
其他的
'在链接单元中
如果LinkedCell.Value2为True,则
"未经检查,
ChangingCell.FormulaLocal=ChangingCell.FormulaLocal
其他的
”他说
ChangingCell.FormulaLocal=vbNullString
如果结束
如果结束
设置LinkedCell=Nothing
Set FormulaCell=无
设置ChangingCell=Nothing
端接头

我不认为这是一个用户表单问题,问题是,工作表是从原始工作表动态创建的,然后工作表的名称不同。因此,如果我现在将此代码放在Sheet模块上,该模块用作生成的工作表的基础工作表,那么名称将不正确。我想知道我是否可以按ActiveSheet.Range而不是Sheets(“sheet_Name”).Range选择当前活动的工作表?是的,您可以,即使这有点危险,因为它可能不在好的工作表上。这些床单的名字是无法预料的吗?而且这些代码必须放在一个特定的工作表中,所以最坏的情况是,您创建一个空工作表,其中包含有关约束的已编辑代码,并将其复制到新代码中。您的复选框也是自动生成的吗?是的,新工作表的名称很容易预测,它会在工作表的名称中添加一个运行编号。将复制整个工作表,包括所有代码和复选框。因此,新生成的工作表将在VBA中有一个excel对象,具有相同的代码。好的,它将很好地为您工作!如果您有任何问题,请告诉我!;)谢谢,我把你的答案和其他答案混合在一起,使它起作用了。我把你的话说对了,因为它是最清楚的,你付出了很大的努力,并回答了评论,谢谢!
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