excelvba中的运算符重载

excelvba中的运算符重载,excel,vba,operator-overloading,uncertainty,Excel,Vba,Operator Overloading,Uncertainty,我想做的是: 我想用Excel在我的自定义数据类型上运行自定义函数。例如,在计算公式时,如果计算涉及自定义数据类型之一,我希望Excel运行我的函数,而不是“+”运算符 我为什么要这样做: 在分析化学中,每个数字都有一个不确定度,并写上: 13.56(±0.02)毫米 我想创建一个自定义数据类型,将数字的大小和不确定性保持在同一单元格中 另外,我想实现操作符重载,所以当我写 =A1+A2 A1或A2包含一个不确定性类型的数字,我的自定义函数将代替默认值运行 “+”运算符来计算不确定度 这将使我

我想做的是:

我想用Excel在我的自定义数据类型上运行自定义函数。例如,在计算公式时,如果计算涉及自定义数据类型之一,我希望Excel运行我的函数,而不是“+”运算符

我为什么要这样做:

在分析化学中,每个数字都有一个不确定度,并写上:

13.56(±0.02)毫米

我想创建一个自定义数据类型,将数字的大小和不确定性保持在同一单元格中

另外,我想实现操作符重载,所以当我写

=A1+A2
A1或A2包含一个不确定性类型的数字,我的自定义函数将代替默认值运行 “+”运算符来计算不确定度

这将使我的电子表格更加干净,因为目前,我必须写这样一份声明

=ADD_UNC(A1, A2)
这对于非常简单的方程来说是很好的,但是当我试图建立的运算甚至有点不平凡的时候,这就成了一件痛苦的事情

=MULT_UNC(A3, ADD_UNC(MULT_UNC(A5, A1, A2), A3)

vs.

=A3*((A1*A2)+A3)
为什么我认为这是可能的:

我知道在真正成熟的编程语言(如C#)中,运算符重载非常常见,而且非常容易执行

谢谢你的帮助


Michael在VBA中不可能。VBA旨在提供帮助实现自动化的脚本。你看,我们称之为宏。VBA不是建立在模块化类或对象之上的。在编辑器中键入/点击enter键时,VBE将直接写入P代码。VBA非常棒,包含了很多功能,但是在VBA中期待这些功能有点牵强。即使在将来也不可能拥有此功能。只是一个建议,不要太担心代码修饰,它们是无用的开销。

下面是一个使用工作表更改事件的黑客。基本上,您可以在包含“+”字符的单元格中放置所需的任何内容,从而有效地分离正常函数中的“+”符号

Private Sub Worksheet_Change(ByVal Target As Range)
If UBound(Split(CStr(Target), "+")) > 0 Then
    Target = "Overloaded"
Else:
    Target = "Not overloaded"
End If
End Sub

从这一点来看,您正在寻找的是不可能的,尽管我觉得它将是一个优秀的vba功能,如果它能够实现的话。事实上,我在不久前偶然发现了该页面,并希望从那时起情况有所改变。我不是这方面的专家,但我相信微软最近已经将Office VBA从基于VB6扩展到了基于.NET(真的不要引用我的话)?一个想法是创建一个事件,标记单元格的输入,比如使用
拆分
函数,如果发现
+
,修改单元格以执行所需操作。@MichaelMolter,Ms在过去十年中在VBA中没有做什么好事。VSTO是一匹死马。我相信@MattCremeens评论提出了一个可行的解决方案——尽管是通过另一条途径。我可以想象用重载的“+”、“-”等在单元格中随意编写函数。运算符,然后简单地用一个宏将该函数扩展为它必须工作的格式。说代码化妆品是无用的,这完全是言过其实。我在一个需要干净、可读、可调试的工作表的领域工作。我所做的每件事都要经过讲师/主管的检查,并且必须让他们理解。这就是为什么会出现这样的问题。@MichaelMolter您误解了代码的可读性。我有doAdd(param1,param2)来添加两个非常可读和标准的数字。用“+”替换doAdd并不是一种装饰性的、无用的开销。实际上并不是一种开销,因为大多数代码装饰性的东西都发生在编译时。。。注意:实现此功能的真正方法是对VBEUN进行黑客攻击。目前,此解决方案意味着您永远无法在工作表上简单地添加两个数字。也许这对你来说没什么大不了的。