2016-09-27 228 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