VBA - 未定义的用户定义类型

时间:2017-04-24 20:33:57

标签: excel vba excel-vba

我对此错误的所有搜索都没有帮助。这应该很简单......我的琐碎模块[名为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? 您可以想象这不是关于简单的数学,而是关于调用返回Type的函数的能力,然后在工作表中使用该Type的一个成员。我的Excel是Office Professional Plus 2010的一部分。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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

答案 2 :(得分:-1)

我遇到了这个问题,并且发现一定要确保在模块的开头定义了类型,然后再用潜艇解决问题。