我正在尝试查看是否有一种方法可以在 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 的内容,新内容将显示在消息框中,但如果我在脚本实验室 https://www.microsoft.com/en-us/garage/profiles/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 事件,如果没有,是否还有可以触发的另一个工作表或工作簿事件?
一些背景:
我试图找到解决方案这个问题 https://stackoverflow.com/questions/57999868/is-there-is-a-way-to-write-macro-to-worksheet#57999868并认为一个好的解决方法是使用 Office-JS 将 VBA 代码写入单元格,然后使用 Worksheet_Change 事件过程执行在该单元格中写入的 VBA 代码。
不幸的是,到目前为止这还不起作用,但我认为值得提出这个更具体的问题,因为解决这个问题将是允许从 Office-JS 执行 VBA 代码的最后一块垫脚石(这将是非常好的)。