javascript - Office-JS 可以触发 VBA 工作簿或工作表事件过程吗?
问题描述
我正在尝试查看是否有办法在 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 事件,如果没有,是否可以触发另一个工作表或工作簿事件?
一点上下文:我试图找到这个问题的解决方案,并认为一个好的解决方法是使用 Office-JS 将 VBA 代码写入单元格,然后使用 Worksheet_Change 事件过程执行写入该单元格中的 VBA 代码.
不幸的是,到目前为止还没有奏效,但我认为值得提出这个更具体的问题,因为解决这个问题将是允许从 Office-JS 执行 VBA 代码的最后一步(这将非常好)。
解决方案
change
事件不会运行,但事件selectionchange
会运行,因此您可以使用它来触发您的代码:填充特定单元格,然后选择它
sheet.getRange("A999").values = 'Hello from Office-JS';
sheet.getRange("A999").select();
工作表模块:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address(False, False) = "A999" Then
MsgBox Target.Value
End If
End Sub
编辑:在审查中,原始问题的 OP 已经解决了大部分问题......
推荐阅读
- java - `protoc` 生成无效的 Java
- azure - 如何使用 Windows 安全中心为托管在 AZURE VM 中的 Web 应用程序配置安全警报
- spring-boot - 带有外部调度程序的 Camel Spring Boot
- python - 如何附加到具有特定格式的列表
- .net-core - 身份服务器 4 的授权类型应该用于电子商务应用程序
- oracle - 计算oracle中不同范围的计数
- mongodb - 如何使 UID 字段相对于日期范围是唯一的,以删除 MongoDB 中的重复行
- excel - 读取显示的单元格值而不是公式产生的整个值
- javascript - 如何在模具中的对象上使用地图
- sql-server - 获取字符串直到第二次出现一个字符