我有一個xll(一個相當複雜的C++項目)導出一個函數,由於歷史原因,這個函數需要大量的參數,並且精確地說是。如何從無法註冊到函數嚮導的xll加載項調用函數?
這是一個魔號:顯然是在Excel 2003中存在的30個參數(」在Microsoft Office Excel 2003中的最大數,任何功能可以利用參數的最大數量爲30,雖然大多數時間比少這個「),但在功能嚮導中輸入over 20 the function cannot be registered。
現在,正如你所猜測的那樣,我一直要求添加3個以上的參數。好吧,所以參數計數可以達到23(至少,這個函數不是爲了「人類消費」,而是總是由VBA包裝調用)。
通過使用VC++調試器附加到Excel進程,我在註冊時得到錯誤代碼4,代表xlretInvCount。
我確定逗號分隔參數名稱的字符串是shorter than 255 characters。 順便說一句,我使用xlw 4(舊版本,我知道)。
因此,如果限制是30我希望能夠通過
Application.Run("function name", ..... very long list of arguments)
調用我的功能,但不使用嚮導。麻煩的是,VBA告訴我該功能沒有註冊。
那麼,我該如何正確使用一個函數,它需要20個以上的參數,少於30個?
注:請不要陳述明顯。我知道問題的真正關鍵所在。重構目前是不可能的。
我不確定是否將此視爲重構,但通常可以通過將範圍(其中包含參數)作爲單個參數傳遞來減少參數的數量。邪惡,骯髒的選擇:將參數作爲字符串傳遞並解析字符串 - 尤其是在您通過VBA包裝器調用它之後。 –
這是我正在考慮的後備,但我想知道爲什麼我顯然不能克服只應該是「不具約束力」的限制。 – Francesco