共用方式為


在 Excel 中存取 XLL 程式代碼

適用於: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 巨集表呼叫,若是如此,傳回值會轉換為 TRUEFALSE。 因此如果您的命令成功執行,您應該傳回 1,而如果失敗或使用者已取消,則傳回 0。

您可以取得如何使用 C API 函式 xlfCaller 叫用命令的相關信息。 如需詳細資訊,請參閱 xlfCaller

從 Excel 2007 開始,使用者介面與舊版非常不同。 在大部分情況下,仍然支援允許新增和刪除自定義功能表欄、功能表、子功能表、功能表項、自訂工具列和工具列按鈕的 C API 函式。 不過,它們不一定會以使用者熟悉的方式提供新增的專案。 您應該仔細檢查是否仍可存取任何新增的功能,或實作版本特定的自定義。 從 Excel 2007 開始,使用者介面最適合使用 Managed 程式代碼模組進行自定義,然後可以與您的 XLL 命令緊密結合。

另請參閱