2017-04-24 60 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 
相关问题