2015-05-22 81 views
2

有没有一种方法(VB?)到动态地向Excel单元格中添加公式动态地向Excel单元格添加公式

我有一个条件为true和false的单元格,它们基于复选框进行更改。

而我有另一个单元格,其中有一个公式。 如果取消选中复选框,应使用此公式。 如果复选框为,那么用户应该能够手动插入值(没有任何公式提示),所以公式不应该存在。

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

这怎么办?我对excel编码和VBA不是很熟悉。

回答

0

如果你有一个经典的Excel复选框,你可以添加一个链接单元格这将是真或假。

在下面的代码,您的单元格链接A1,所述细胞与式中B1使用细胞需要是空的或由式填充C1

你需要指定SHEET_NAME(可型动物)和代码直接放入表“模块”在VBA(按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 
+0

问题是,将纸张从原点表动态创建,然后名称的床单是不同的。所以,如果我现在将这个代码放在工作表模块上,那么这个代码将用作生成工作表的基础工作表,那么名称就会不正确。我想知道是否可以通过ActiveSheet.Range而不是Sheets(“Sheet_Name”)来选择当前活动工作表。Range? –

+0

是的,你可以,即使它有点危险,因为它可能不是最好的。这些表的名称是不可能预测的?此代码必须放入特定工作表中,因此最糟糕的情况是,使用编辑后的代码创建一个空白工作表,并将其复制到新代码中。您的复选框是否也会自动生成? – R3uK

+0

是的,新工作表的名字很容易预测,它会为工作表名称添加一个运行编号。整个工作表被复制,包括所有的代码和复选框。因此,新生成的工作表将在VBA中具有相同代码的Excel对象。 –

1

也可以使用:

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

您需要将代码插入到用户窗体复选框,点击或更改事件都应该有同样的效果,只是在用户窗体复选框双击它会带你到点击事件或用“更改”替换点击,希望这就是你的意思,欢呼 聚苯乙烯。感谢您的建议@ 99moorem

+0

,这是一个用户窗体队友 – R3uK

2

好吧,你需要在TRUE/FALSE细胞触发EXECUT接下来的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