簡體   English   中英

VBA - 用戶定義的類型未定義

[英]VBA - user defined type not defined

我對這個錯誤的所有搜索都沒有幫助。 這應該很簡單……我的小模塊 [名為 FTA] 包含以下代碼:

Public Type AddMult
    Added As Double
    Multiplied As Double
End Type

Function test(A As Double, B As Double) As AddMult
    test.Added = A + B
    test.Multiplied = A * B
End Function

該模塊編譯干凈。 然后,嘗試將工作表單元格值設置為函數返回的類型成員之一,我使用以下語法。

=test.added(1,2)

它會導致“用戶定義的類型未定義”彈出錯誤,單元格顯示#NAME?。 我如何讓它顯示正確的值 3? 正如您可以想象的那樣,這不是關於簡單的數學,而是關於調用返回類型的函數,然后在工作表中使用該類型的一個成員的能力。 我的 Excel 是 Office Professional Plus 2010 的一部分。

您可以創建兩個可用作 UDF 的函數,然后讓這些函數中的每一個調用您現有的函數,例如:

Public Type AddMult
    Added As Double
    Multiplied As Double
End Type

Function test(A As Double, B As Double) As AddMult
    test.Added = A + B
    test.Multiplied = A * B
End Function

Function test_added(A As Double, B As Double) As Double
    test_added = test(A, B).Added
End Function

Function test_multiplied(A As Double, B As Double) As Double
    test_multiplied = test(A, B).Multiplied
End Function

然后,您可以在 Excel 單元格中使用=test_added(1,2)

這是 YowE3K 的補充,盡管他們的例子確實是最好的選擇。 這使用一個可選的布爾值來查看從 AddMult 返回哪個值

Public Type AddMult
    Added As Double
    Multiplied As Double
End Type

Function test(A As Double, B As Double, Optional returnMulti As Boolean = False) As Double
Dim am As AddMult
    am.Added = A + B
    am.Multiplied = A * B
    If returnMulti = True Then
        test = am.Multiplied
    Else
        test = am.Added
    End If
End Function

我遇到了這個問題,發現在 subs 解決問題之前確保在模塊的開頭定義類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM