gpt4 book ai didi

javascript - Office-JS 可以触发 VBA 工作簿或工作表事件过程吗?

转载 作者:行者123 更新时间:2023-11-30 13:52:19 24 4
gpt4 key购买 nike

我正在尝试查看是否有一种方法可以在 Office-JS 中执行某些操作,以触发事件过程在 Excel VBA 中运行,但看起来 VBA 事件在 JavaScript 代码的执行过程中被禁用。

例如,假设我有一个工作簿,其中有一个名为“Sheet1”的工作表,并且在该工作表模块中我有以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" And Target.Value2 <> vbNullString Then
MsgBox Target.Value2
End If
End Sub

我期望的是,如果我更改单元格 A1 的内容,新内容将显示在消息框中,但如果我在 Script Lab 中运行以下代码片段(基于空白片段),即使单元格 A1 被成功编辑,事件也不会被触发:

$("#run").click(() => tryCatch(run));

async function run() {
await Excel.run(async (context) => {

const sheet = context.workbook.worksheets.getItem("Sheet1");
sheet.getRange("A1").values = 'Hello from Office-JS';

await context.sync();
});
}

/** Default helper for invoking an action and handling errors. */
async function tryCatch(callback) {
try {
await callback();
} catch (error) {
// Note: In a production add-in, you'd want to notify the user through your add-in's UI.
console.error(error);
}
}

所以我的问题是:有没有办法进行设置,以便 JavaScript 代码可以触发 Worksheet_Change 事件,如果没有,是否有另一个可以触发的工作表或工作簿事件?

一点背景:我试图找到 this question 的解决方案并认为一个好的解决方法是使用 Office-JS 将 VBA 代码写入单元格,然后使用 Worksheet_Change 事件过程来执行在该单元格中编写的 VBA 代码。

不幸的是,到目前为止这还没有奏效,但我认为值得问这个更具体的问题,因为解决这个问题将是允许从 Office-JS 执行 VBA 代码的最后一步(这将是非常好的不错)。

最佳答案

经过更多测试,我设法发现工作簿对象的 Workbook_NewSheet 事件过程是通过使用 Office-Js 创建一个新工作表来触发的:

var sheets = context.workbook.worksheets;
var sheet = sheets.add("NewSheet");
sheet.getRange("A1").values = [["Hello from Office-JS"]];

因此,可以在 ThisWorkbook 模块中使用以下代码来在该上下文中显示消息框:

Private Sub Workbook_NewSheet(ByVal Sh As Object)
If Sh.Name = "NewSheet" Then
If Sh.Range("$A$1").Value2 <> vbNullString Then
MsgBox Sh.Range("$A$1").Value2
End If
End If
End Sub

这里的好处是,即使 Office-JS 代码在创建工作表后写入工作表,VBA 中的事件也只会在 JavaScript 代码完成后运行,这意味着单元格 A1 中的值将及时更改当 VBA 代码运行时。

关于javascript - Office-JS 可以触发 VBA 工作簿或工作表事件过程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58001786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com