簡體   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