解決常見問題

使用巨集轉換器將 VBA 程式碼轉換為 Apps Script 時可能會遇到的常見問題。

列印

可列印檔案的 VBA API 會自動轉換為 Apps Script,但運作方式可能與原始 VBA API 不同。以下提供兩個範例:

VBA APIApps Script 中的行為
PrintOut系統會轉換成 Apps Script,但 Apps Script API 會列印成檔案,而非印表機。您可以手動列印 PDF 檔案。
PrintToFile轉換成 Apps Script。PDF 檔案會儲存在「我的雲端硬碟」資料夾中。

未轉換的項目

下列功能不會由 Macro 轉換器轉換,因此需要手動轉換:

觸發條件

巨集轉換器無法轉換兩種觸發條件:鍵盤快速鍵和部分事件型觸發條件。在許多情況下,您可以手動建立這些觸發條件。

鍵盤快速鍵

如要新增鍵盤快速鍵,請按照這篇文章中的步驟操作,將函式匯入為巨集。

以事件為準的觸發條件

VBA 程式碼中的部分事件 (例如 BeforeCloseBeforeSave) 在 Apps Script 中沒有對等的功能,但您也可以建立解決方法。

對於 BeforeClose 等事件,您可以建立自訂選單或按鈕,以便在關閉試算表前執行需要採取的動作。

由於 Google 試算表會自動儲存每次編輯的內容,因此 BeforeSave 這類事件的解決方法無法使用。

使用者表單

在 VBA 中,UserForm 是應用程式使用者介面 (UI) 中的視窗或對話方塊。巨集轉換器不會轉換 UserForms。您可以在 Apps Script 中手動建立。

建立使用者表單對話方塊

  1. 使用電腦在 Google 試算表中開啟轉換後的檔案。
  2. 按一下頂端的「擴充功能」擴充功能 > ** Apps Script**。
  3. 在編輯器的左側,依序點選「檔案」旁邊的「新增檔案」圖示 >「HTML」。建議您將 HTML 檔案設為與原始 VBA UserForm 相同的名稱。
  4. 新增要在表單中顯示的欄位和資訊。如要進一步瞭解 HTML 表單,請造訪 W3school.com
  5. 在左側按一下含有已轉換程式碼的 Apps Script 檔案 (GS 檔案)。
  6. 如果程式碼中已有 onOpen() 觸發條件,請使用以下程式碼更新觸發條件。如果程式碼中沒有 onOpen() 觸發條件,請加入以下程式碼。
    function onOpen() {
     SpreadsheetApp.getUi()
         .createMenu('User Form')
         .addItem('Show Form', 'showForm')
         .addToUi();
    }
    function showForm() {
     var html = HtmlService.createHtmlOutputFromFile('userform_module_name')
         .setWidth(100)
         .setTitle('Sign-up for Email Updates');
     SpreadsheetApp.getUi().showSidebar(html);
    }
        
  7. userform_module_name 替換成您新增的 HTML 檔案名稱。
  8. 按一下頂端的「儲存專案」圖示
  9. 切換至 Google 試算表,然後重新載入頁面。
  10. 在 Google 試算表頂端,依序按一下「使用者表單」 >「顯示表單」

已命名範圍

在 Excel 中,已命名範圍是為單一儲存格或儲存格範圍命名。

將 Excel 檔案轉換成 Google 試算表時,系統無法轉換某些類型的已命名範圍,因為系統不支援這些已命名範圍。以下提供兩個範例:

不支援的已命名範圍說明
資料表Google 試算表不支援,但有解決方法。

如要在試算表中重新建立這個已命名範圍,請新增命名範圍,並指向資料表範圍的 A1 標記法。請在 VBA 程式碼中使用與原始命名範圍相同的名稱,這樣轉換的程式碼才能辨識該範圍。
範圍清單Google 試算表不支援這項功能。目前沒有解決方法。