Excel 单元格公式可以引用 UserForm 控件吗?
Posted
技术标签:
【中文标题】Excel 单元格公式可以引用 UserForm 控件吗?【英文标题】:Can an Excel cell formula refer to a UserForm control? 【发布时间】:2017-12-13 15:34:24 【问题描述】:我有一个带有文本框的用户窗体,这些文本框已经通过 ControlSource 属性绑定到某些工作表单元格。我需要在其中两个绑定值之间运行计算,并将结果放在第三个工作表单元格中。我知道有很多方法可以做到这一点,但我想知道是否有某种方法可以作为引用 UserForm 控件值的工作表单元格中的公式来做到这一点。例如,我希望能够在单元格 C3 中放置一个公式,类似于
= UserForm1.TextBox1.Value * UserForm1.TextBox2.Value
但我没有找到任何使用工作表单元格公式直接从用户窗体控件获取值的参考。 (不,在这种情况下,我不能通过将“= A1 * B2”之类的内容插入单元格 C3 来引用绑定的单元格。这个问题专门关于从工作表中引用 UserForm 控件是否可行单元格公式。) 提前感谢您提供任何有用的建议。
【问题讨论】:
为什么你不能在C3
中使用=A1*B2
?
因为绑定的单元格引用会发生变化,但我希望计算结果始终位于同一个单元格中。我可以在绑定单元格更改时传递它们的地址,并且每次都在 C3 中重写公式,如果必须的话,但是只引用控件本身中的值会容易得多。
我在我的回答中展示了一个 UDF,但我仍然认为您可以只使用公式而无需读取控件属性。如果单元格要更改,则使用命名单元格(从而抽象出绝对地址)。让控件绑定到命名范围,并让您的公式引用名称。
【参考方案1】:
在工作表上引用 ActiveX 控件属性的唯一方法是通过用户定义的函数,例如:
Public Function GetTextBoxValue(TextBoxName As String) As String
On Error GoTo 0
Dim o As OLEObject
Set o = Sheet1.OLEObjects(TextBoxName)
On Error Resume Next
If Not o Is Nothing Then
GetTextBoxValue = o.Object.Text
End If
End Function
然后从单元格中调用函数,例如:=GetTextBoxValue("TextBox1")
【讨论】:
我认为您的意思是Sheet1.OLEObjects(TextBoxName)
而不是 Sheet1.OLEObjects("TextBox1")
。
确实 - 重构了一半。现已修复以上是关于Excel 单元格公式可以引用 UserForm 控件吗?的主要内容,如果未能解决你的问题,请参考以下文章