VBA - 未定义用户定义的类型
问题描述:
我对这个错误的所有搜索都没有帮助。这应该是简单的...我的平凡模块[名为FTA]包含此代码:VBA - 未定义用户定义的类型
模块编译干净。然后,尝试将工作表单元格值设置为该函数返回的某个类型成员,我使用下面的语法。
=test.added(1,2)
它导致弹出错误和小区#NAME显示“没有定义用户定义的类型”? 我如何得到它显示正确的值3? 正如你可以想象的那样,这不是简单的数学,而是关于调用返回Type的函数的能力,然后在工作表中使用该Type的一个成员。我的Excel是Office专业增强版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
VBA不能像UDF那样工作。如果你想从一个UDF返回多个值,你需要返回一个数组,而不是一个Type。 –
2感谢您的建议,但我的问题更复杂。我的真正的UDF返回一个混合了标量,布尔值,字符串等的类型。我想避免写一个单独的VBA函数来单独返回每个类型的成员。看起来工作表不能识别我的VBA公共类型,也不知道UDF返回这种类型的对象。如何“教”工作表以了解? VBA似乎接受语法“test(1,2).Added”,但工作表没有。为什么? – Gershon
你不能教Excel来识别你的类型。故事结局。 – YowE3K