2016-09-27 113 views
0

我想在Excel VBA中使用Analysis ToolPak VBA加载项中的复数函数来创建自定义函数。如果我分配c = imSum(a, b),则会出现弹出错误“编译错误:子或功能未定义”。如果我将其更改为c = WorksheetFunction.imSum(a, b)(正如我发现的那样,导致我尝试),但没有出现弹出错误,但在单元格中出现#VALUE错误。将方法名称更改为某些伪造的内容会产生相同的结果。我在Excel中检查了“分析工具库”和“分析工具库 - VBA”加载项,但在VBA加载项管理器中根本没有列出。这是一个语法的东西或缺少模块的东西?如何在Excel 2003 VBA中使用复杂功能?

UPDATE ... 在参考窗口中检查“atvbaen.xls”后,我使用简单格式c = imSum(a, b)得到了这个工作。我也跑了命令AddIns.Add("atvbaen.xls").Installed = True,但我不知道这是否有帮助。无法获得[imSum(a, b)]评估或Application.WorksheetFunction.ImSum(a, b)正常工作。

+0

你能发表更多的意见? – litelite

+0

就是这样。函数ctest(a,b) ctest = WorksheetFunction.imSumx(a,b) End Function – robisrob

+0

有一个“x”太多:将imSumx改为imSum – user3598756

回答

1

这是一个有点长镜头,但你使用Excel 2003?如果你不是,那么你不必担心被安装的分析工具库/ VBA工具库,因为这些函数都是内置的(事实上,如果你有它们,我会卸载它们)。

如果您在使用Excel 2003中,您需要安装VBA的ATP,你也需要去到引用您的VBA项目,并检查“atpvbaen.xls”。

+0

是的,我是。更喜欢2003年的小按钮。我发现这个参考并检查了它,但它没有改变任何东西。仍然有空的插件管理器。有很高的期望,也许这是一个需要的步骤,但仍然不存在。你怎么知道这个神秘的参考?! – robisrob

+0

现在工作,但很难说这是否有帮助。谢谢! – robisrob

2

在工作表中,IMSUM()需要字符串作为输入,因此在VBA

Public Function whatever(s1 As String, s2 As String) As String 
    s3 = Application.WorksheetFunction.ImSum(s1, s2) 
    whatever = "Hello " & s3 & " World" 
End Function 

enter image description here

如果你不能在工作表单元格使用IMSUB(),则有机会太少,VBA也能找到它。

编辑#1:

替补允许比的UDF更好的调试。试试这个子,告诉我们发生了什么:

Sub HelpMePlease() 
    Dim s1 As String, s2 As String 
    Dim s3 As String 

    s1 = "1+1i" 
    s2 = "2+2i" 
    s3 = Application.WorksheetFunction.ImSum(s1, s2) 
    MsgBox s3 
End Sub 
+0

感谢您的详细答案。我已经完全复制了这一点,并获得相同的#VALUE错误。如果我删除第二行并将第三行从's3'改为's1',那么我会得到'Hello 12-23i World',所以很显然,问题在于我的VBA分析工具包。不知道现在该怎么做 – robisrob

+0

是的我可以在Excel中使用'IMSUM'和'IMSUB'就好了,只是不在VBA中显然 – robisrob

+0

@robisrob请参阅我的**编辑#1 ** –

1

另一种选择是,以评估他们:

o = [IMSUM(A1,B1)] 

a = "12+34i" 
b = "67-89i" 
c = Evaluate("IMSUM(" & a & "," & b & ")") 
+0

'工作,但wasn没有必要,很难合作。通常返回一个零 – robisrob