6

我想做的事:

我想在 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#)中,运算符重载非常常见且非常容易执行。

谢谢您的帮助,

迈克尔

4

2 回答 2

3

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

于 2015-08-17T20:56:52.827 回答
2

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

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
于 2015-08-17T21:07:49.897 回答