2017-04-24 58 views
0

我對這個錯誤的所有搜索都沒有幫助。這應該是簡單的...我的平凡模塊[名爲FTA]包含此代碼:VBA - 未定義用戶定義的類型

模塊編譯乾淨。然後,嘗試將工作表單元格值設置爲該函數返回的某個類型成員,我使用下面的語法。

=test.added(1,2)

它導致彈出錯誤和小區#NAME顯示「沒有定義用戶定義的類型」? 我如何得到它顯示正確的值3? 正如你可以想象的那樣,這不是簡單的數學,而是關於調用返回Type的函數的能力,然後在工作表中使用該Type的一個成員。我的Excel是Office專業增強版2010

+1

VBA不能像UDF那樣工作。如果你想從一個UDF返回多個值,你需要返回一個數組,而不是一個Type。 –

+0

2感謝您的建議,但我的問題更復雜。我的真正的UDF返回一個混合了標量,布爾值,字符串等的類型。我想避免寫一個單獨的VBA函數來單獨返回每個類型的成員。看起來工作表不能識別我的VBA公共類型,也不知道UDF返回這種類型的對象。如何「教」工作表以瞭解? VBA似乎接受語法「test(1,2).Added」,但工作表沒有。爲什麼? – Gershon

+0

你不能教Excel來識別你的類型。故事結局。 – YowE3K

回答

1

部分可以創建兩個功能,這些功能可作爲的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)

0

這是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 
相關問題