繁体   English   中英

Excel VBA中的运算符重载

[英]Operator Overloading in Excel VBA

我想做什么:

我想在 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)

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

, full-blown programming languages such as C#, operator overloading is very common and very easy to perform.我知道在、成熟的编程语言(如 C#)中,运算符重载非常常见且易于执行。

感谢您的帮助,

迈克尔

在 VBA 中不可能。 VBA 旨在提供有助于自动化的脚本。 你看,我们称它们为宏。 VBA 不是建立在模块化类或对象之上。 当您在编辑器中键入/按 Enter 键时,您的 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM