我有一个单元格 (C17),其值应取决于通过单选按钮做出的选择。一个按钮称为“默认”,另一个按钮称为“自定义”。问题是,当我选择“自定义”按钮时,我希望单元格 C17 允许用户输入。但是,这将删除该单元格中的任何公式。我希望能够选择“自定义”按钮并在单元格中输入我自己的值,但如果我切换到“默认值”,我希望在同一单元格中显示的值基于公式。
附加说明:此单元格值也将在其他公式中引用(我希望这不会改变上述功能的实现方式,但只是想说明一下)。我相信可能需要使用 VBA,但到目前为止我还没有这样做(单选按钮只是表单控件)。
我看到了这篇文章,但并不完全相同:EXCEL - 如何在同一单元格中显示公式输出和用户输入?
答案1
显然,选项按钮不会激活页面中的更改事件,您需要将这些宏链接到正确的选项按钮:
Sub Opt1()
Sheet1.Range("C17").Formula2 = "=A2 * 2"
End Sub
Sub Opt2()
Sheet1.Range("C17").Formula2 = Empty
End Sub
以上内容需要放在工作表代码中,然后使用分配宏来指定选项按钮。
更改以反映以下评论:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C30")) Is Nothing Then
Select Case Target.Value
Case 1
Range("C17").Formula2 = "=$A2 * 2"
Case 2
Range("C17").Value = Empty
End Select
End If
End Sub
上述代码进入将发生变化的工作表的工作表代码中。
您可以使用单个按钮(此代码假定为表单按钮,而不是 activex),只需更改工作表引用和公式即可。
Sub CVal()
Dim ws As Worksheet: Set ws = Sheet1
If ws.Range("C17").Formula2 = "=$A2 * 2" Then
ws.Range("C17").Value = Empty
ws.Shapes(Application.Caller).TextFrame.Characters.Text = "Defaults"
Else
ws.Range("C17").Formula2 = "=$A2 * 2"
ws.Shapes(Application.Caller).TextFrame.Characters.Text = "Custom"
End If
End Sub
如果您想使用两个按钮,只需将 if 语句中的代码放入两个单独的按钮中即可。
注意:代码放在模块中,而不是工作表代码中。贾斯汀