Excel VBA 中的运算符重载

Operator Overloading in Excel VBA

我想做的事情:

我想在我的自定义数据类型上使用 Excel 到 运行 中的 operator overloading 自定义函数。例如,在评估公式时,当计算涉及我的自定义数据类型之一时,我希望 Excel 到 运行 我的函数而不是 '+' 运算符。

我为什么要做:

在分析化学中,每个数字都有一个不确定性,写成:

13.56 (±0.02) 毫米

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

另外,我想实现运算符重载,所以当我写

=A1+A2

并且 A1 或 A2 包含不确定类型的数字,我的自定义函数 运行s 而不是默认值 '+'运算符计算不确定性。

这将使我的电子表格更加清晰,因为目前,我必须写这样的声明

=ADD_UNC(A1, A2)

这对于非常简单的方程式来说很好,但是当我试图形成的运算甚至有点不平凡时就会变得很痛苦。

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

vs.

=A3*((A1*A2)+A3)

为什么我认为这是可能的:

我知道在真实中,C#等成熟的编程语言中,运算符重载非常普遍且非常容易执行。

感谢您的帮助,

迈克尔

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

这是使用 Worksheet_Change 事件的技巧。您基本上可以在包含“+”字符的单元格中放置您想要的任何内容,从而有效地脱离“+”符号的正常功能。

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