跳到主要内容

转换 VBA 宏

ONLYOFFICE 宏与 Microsoft 宏有所不同,Microsoft 宏使用的是 Visual Basic for Applications(VBA)脚本语言,而 ONLYOFFICE 宏使用的 JavaScript 语言则更加灵活,可用于任何平台。因此, ONLYOFFICE 编辑器可以支持在 Windows,Linux 和 macOS 平台使用。

如果您此前在 Microsoft Office 中使用了宏功能,可能会遇到一些不便,因为这些宏与 ONLYOFFICE 不兼容。不过,您可以将之前使用的宏转换为适用于新编辑器的版本。

使用 AI 插件进行自动转换

如果您希望加快转换过程,从 9.0 版本开始,您可以使用 ONLYOFFICE 内置的 AI 插件自动将 VBA 代码转换为与 ONLYOFFICE 宏兼容的 JavaScript:

  1. 配置 AI 插件。详细的配置步骤可以见于[此处]:(https://helpcenter.onlyoffice.com/docs/userguides/ai/configuration.aspx).

  2. 打开视图选项卡,点击

  3. 窗口中点击 AI 图标,选择从 VBA 转换

    AI 插件AI 插件

  4. 从 VBA 转换宏窗口中插入 VBA 代码,然后点击创建。生成的宏示例将被插入到窗口中。

    转换 VBA转换 VBA

  5. 审查代码,如有必要可进行调整。

    尽管 AI 插件可以生成完整且可运行的宏,但它并不总是完美的。请务必仔细检查输出内容,并进行彻底测试,尤其是对于复杂的宏。

  6. 点击 播放图标 测试脚本。

例如,您有一个简单的 VBA 宏,用于取消活动工作表中所有合并单元格的合并:

Sub UnmergeAllCells()
ActiveSheet.Cells.UnMerge
End Sub

您可以将此 VBA 代码粘贴到 AI 插件转换器中。插件将返回以下 JavaScript 宏:

(function(){
// 此代码将取消活动工作表中所有合并单元格的合并

// 获取当前工作表
var oWorksheet = Api.GetActiveSheet();

// 通过获取工作表的已使用范围来获取工作表中的所有单元格
var oUsedRange = oWorksheet.GetUsedRange();

// 检查是否有已使用范围
if (oUsedRange) {
// 取消已使用范围中所有单元格的合并
oUsedRange.UnMerge();
}

// 替代方法:获取整个工作表范围并取消合并
// 这样可以确保所有可能的合并单元格都被取消合并
var oRange = oWorksheet.GetRange("A1:XFD1048576");
oRange.UnMerge();
})();

运行该宏,检查它是否成功取消了工作表中所有合并单元格的合并。

手动转换 VBA 宏

如果 AI 生成的版本无法正常工作,或者您希望完全了解并管理宏,您可以手动转换 VBA 宏:

  1. 分析原始 VBA 宏的逻辑。
  2. ONLYOFFICE Office API 中查找等效的方法和事件。
  3. 用 JavaScript 重写宏。
  4. 直接在 ONLYOFFICE 编辑器中进行测试。

过程并不复杂。请看以下示例:

Sub Example()
Dim myRange
Dim result
Dim Run As Long

For Run = 1 To 3
Select Case Run
Case 1
result = "=SUM(A1:A100)"
Case 2
result = "=SUM(A1:A300)"
Case 3
result = "=SUM(A1:A25)"
End Select
ActiveSheet.range("B" & Run) = result
Next Run
End Sub

该宏会对 A 列中三个单元格范围的数值进行求和,并将结果分别写入 B 列的三个单元格中。

使用 ONLYOFFICE 宏也可以实现完全相同的功能。如果您了解 Visual Basic for Applications 和 JavaScript,会发现它们的代码几乎一致且易于理解:

(function()
{
for (let run = 1; run <= 3; run += 1) {
let result = "";
switch (run) {
case 1:
result = "=SUM(A1:A100)";
break;
case 2:
result = "=SUM(A1:A300)";
break;
case 3:
result = "=SUM(A1:A25)";
break;
default:
break;
}
Api.GetActiveSheet().GetRange(`B${run}`).Value = result;
}
})();

同样地,任何其他 Visual Basic for Applications 脚本都可以转换为与 ONLYOFFICE 宏兼容的 JavaScript 代码。未来,我们希望在编辑器中添加一个转换工具,以便自动转换这些宏。