適用於:Excel 2013 |Office 2013 |Visual Studio
若要在 Microsoft Excel 中存取,XLL 包含的函式和命令:
必須由 XLL 匯出。
必須向 Excel 註冊。
向 Excel 註冊函式和命令
註冊會告訴 Excel 下列有關 DLL 進入點的事項:
不論是隱藏的,還是函式是否顯示在 [函式精靈] 中。
不論它只能從 XLM 巨集表或工作表呼叫。
如果是命令,則為工作表函式或巨集工作表對等函式。
其 XLL/DLL 匯出名稱是什麼,以及您想要 Excel 使用的名稱。
如果它是函式:
它會傳回哪些數據類型,並接受做為自變數。
是否透過就地修改自變數來傳回其結果。
是否為變動性。
從 Excel 2007) 開始,是否為安全線程 (支援。
[貼上函式精靈] 和 [自動完成編輯器] 應該顯示哪些文字,以協助呼叫函式。
它應該列在哪個函式類別之下。
這一切都是使用 C API 函 式 xlfRegister 來達成,相當於 XLM 函數 REGISTER。
直接從 Excel 呼叫 XLL 函式
註冊之後,就可以從下列任何位置呼叫 XLL 工作表和巨集工作表函數:內建函式可以從下列位置呼叫:
工作表上的單一單元格或數位公式。
巨集表上的單一儲存格或數位公式。
已定義名稱的定義。
條件式格式對話框中的條件和限制欄位。
透過 C API 函式 xlUDF 從另一個載入巨集。
從 Visual Basic for Applications (VBA) 透過 Application.Run 方法。
您可以使用 C API 函式 xlfCaller,取得函式內呼叫儲存格或儲存格範圍的參考。 如果函式是從儲存格的條件式格式表示式呼叫,您仍會傳回相關聯儲存格的參考,因此您無法假設儲存格的公式包含 XLL 函數。 如果您的函式是從 VBA 用戶定義函式 (UDF) 呼叫, xlfCaller 會再次傳回呼叫 VBA 函式之單元格的位址。 如需詳細資訊,請參閱 xlfCaller。
注意事項
Excel 也會從 [貼上 函式精靈] 和 [ 取代 ] 對話框呼叫 XLL 函式程序代碼。 在 [ 貼上 函式自變數] 對話框中,您可能需要限制程序代碼的正常執行,特別是您的函式可能需要很長的時間才能執行。 若要偵測是否要從其中一個對話框呼叫您的函式,您必須在專案中實作一些程式代碼,以逐一查看所有開啟的視窗,以判斷前端視窗是否為其中一個對話框,如果是,則為哪一個。
直接從 Excel 呼叫 XLL 命令
註冊之後,可以使用其他使用者定義巨集呼叫的所有方式來呼叫 XLL 命令:
與內嵌在工作表上的控件對象相關聯。
從 [執行巨集] 對話框。
從使用 Application.Run 方法的 VBA 用戶定義巨集。
從自定義功能表項或工具列。
註冊命令時,使用設定的快速鍵擊鍵。
當指定的事件被擷取時要執行的命令。
注意事項
XLL 命令會隱藏,因為它們不會出現在 Excel 對話框的可用巨集清單中。 但可以手動輸入巨集名稱欄位。 Excel 需要這些對話框中的已註冊名稱,而不是 DLL 匯出名稱。
向 Excel 註冊的所有 XLL 命令都會由 Excel 假設為下列格式:
short WINAPI xll_cmd_name(void)
{
// Function code...
return 1;
}
Excel 會忽略傳回值,除非是從 XLM 巨集表呼叫,若是如此,傳回值會轉換為 TRUE 或 FALSE。 因此如果您的命令成功執行,您應該傳回 1,而如果失敗或使用者已取消,則傳回 0。
您可以取得如何使用 C API 函式 xlfCaller 叫用命令的相關信息。 如需詳細資訊,請參閱 xlfCaller。
從 Excel 2007 開始,使用者介面與舊版非常不同。 在大部分情況下,仍然支援允許新增和刪除自定義功能表欄、功能表、子功能表、功能表項、自訂工具列和工具列按鈕的 C API 函式。 不過,它們不一定會以使用者熟悉的方式提供新增的專案。 您應該仔細檢查是否仍可存取任何新增的功能,或實作版本特定的自定義。 從 Excel 2007 開始,使用者介面最適合使用 Managed 程式代碼模組進行自定義,然後可以與您的 XLL 命令緊密結合。