解决常见问题

下面列出了使用 Macro Converter 将 VBA 代码转换为 Apps 脚本时可能会遇到的常见问题。

正在打印

用于打印文件的 VBA API 会自动转换为 Apps 脚本,但其行为可能与原始 VBA API 不同。以下是两个示例:

VBA APIApps 脚本中的行为
PrintOut转换为 Apps 脚本,但 Apps 脚本 API 会打印到文件而不是打印机。您可以手动打印 PDF 文件。
PrintToFile转换为 Apps 脚本。PDF 文件会保存在您的“我的云端硬盘”文件夹中。

未转化的商品

以下功能不会通过宏转换器进行转换,需要手动转换:

触发器

宏转换器不会转换两种类型的触发器:键盘快捷键和某些基于事件的触发器。在许多情况下,您可以手动创建这些触发器。

键盘快捷键

如需添加键盘快捷键,请按照将函数作为宏导入的步骤操作。

基于事件的触发器

VBA 代码中的某些事件(例如 BeforeCloseBeforeSave)在 Apps 脚本中没有对应的事件,但您或许可以创建一种解决方法。

对于 BeforeClose 等事件,您可以创建自定义菜单或按钮,以便在关闭电子表格之前点击该菜单或按钮来执行所需的操作。

由于 Google 表格会自动保存每次编辑,因此无法针对 BeforeSave 等事件采取变通方法。

用户表单

在 VBA 中,UserForm 是应用界面 (UI) 中的窗口或对话框。宏转换器不会转换 UserForm。您可以在 Apps 脚本中手动创建它们。

创建用户表单对话

  1. 在电脑上,使用 Google 表格打开转换后的文件。
  2. 点击顶部的扩展程序 > ** Apps 脚本**。
  3. 在编辑器左侧的“文件”旁边,依次点击“添加文件”图标 > HTML。建议您为 HTML 文件指定与原始 VBA UserForm 相同的名称。
  4. 添加您希望在表单中显示的字段和信息。如需详细了解 HTML 表单,请访问 W3school.com
  5. 在左侧,点击包含转换后代码的 Apps 脚本文件(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 表格不支持,但有解决办法。

如需在 Google 表格中重新创建此命名范围,请添加指向表格范围的 A1 表示法的命名范围。使用与 VBA 代码中原始命名范围相同的名称,以便转换后的代码能够识别该名称。
范围列表Google 表格不支持此功能。没有变通方案。