適用於:Excel 2013 |Office 2013 |Visual Studio
本主題描述 Microsoft Excel 中您可能會在 XLL 開發中遇到的已知問題。
取消註冊 XLL 命令和函式
當 XLL 註冊函式或命令時,Excel 會建立資源的新名稱,並將 DLL 函式的參考與該名稱產生關聯。 名稱取自 xlfRegister 函式的第四個自變數 pxFunctionText。 此名稱會從管理工作表名稱的一般對話框中隱藏。 若要取消註冊函式或命令,您必須使用 xlfSetName 函式來刪除名稱,並傳遞名稱,但不傳遞定義。 不過,錯誤會防止從 [函式精靈] 列表中移除名稱。
函式精靈中的自變數描述字串截斷
pxArgumentHelp1 參數和 xlfRegister 函式的所有後續參數都是對應至 XLL 函式自變數的選擇性字串。 [函式精靈] 會顯示這些專案,以在自變數建構對話框中提供說明。 有時 Excel 會在對話框中顯示對應至最後一個自變數的字串時,將它截斷一或兩個字元。 您可以藉由新增額外的「空字串」作為函式註冊的最後一個「自變數說明」參數來避免此問題。
二進位名稱範圍限制
二進位名稱及其數據只能在建立時作用中的工作表再次作用中時擷取。 因為工作表函式無法啟動活頁簿內的工作表 (只有命令可以執行此) ,所以二進位名稱的應用程式非常有限。 例如,如果您有只從特定工作表叫用的命令,您可以使用二進位名稱來儲存命令相關數據。
具有陣語公式的 xlSet 和活頁簿
在 Excel 2003 和舊版中,如果您嘗試將值指派給非使用中工作表之工作表上的範圍,且使用中工作表上的對等範圍包含數位公式, xlSet 函 數就會失敗。 在此情況下,Excel 會顯示「您無法變更陣列的一部分」訊息。這在 Excel 2007 中已修正。
循環參考可在數據表中容許
如果數據表所依據的計算參考數據表本身的內容,Excel 目前不會引發錯誤。 如同這種情況,當您建立或修改用來計算數據表值的公式時,應該小心謹慎。
將整數XLOPER12轉換成 XLOPER
因為整數類型 xltypeInt 是 XLOPER12 數據類型中的 32 位帶正負號的整數,但它在 XLOPER 數據類型中只是 16 位帶正負號的整數,所以某些整數 XLOPER12 值可能無法包含在整數 XLOPER 中。 Excel 會在內部轉換此類型,藉由將類型轉換成浮點 xltypeNumXLOPER 來解決此問題。
Framework XLOper12ToXLOper 函式會鏡像此行為,以便在內部與 Excel 一致。 當您呼叫此函式時,不應假設傳回的 XLOPER 一律為 xltypeInt;如果my_xloper類型為 xltypeNum,則讀my_xloper.val.w 會提供 false 值。
藉由就地修改自變數來傳回 XLOPER 或XLOPER12
Excel 允許註冊傳回 XLOPER 或 XLOPER12 的函式,方法是就地修改自變數。 不過,如果 XLOPER/ XLOPER12 自變數指向記憶體,而指標接著被 DLL 函式的傳回值覆寫,Excel 可能會流失記憶體。 Excel 不會顯示錯誤,但最後可能會當機。 此外,如果 DLL 為傳回值配置了記憶體,Excel 可能會嘗試釋放該記憶體,這可能會導致應用程式立即損毀。 因此,您不應該就地修改 XLOPER/ XLOPER12 自變數。 所有 XLOPER 或 XLOPER12 自變數都應該視為嚴格只讀。
如需詳細資訊,請參閱 Excel 中的記憶體管理。
另請參閱
XLOper12ToXLOper開發 Excel XLL
Excel XLL SDK API 函數參考
Excel 中的記憶體管理