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

2024-01-13

我正在尝试查看是否有一种方法可以在 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 代码的最后一块垫脚石(这将是非常好的)。


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

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 代码运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Office-JS 可以触发 VBA 工作簿或工作表事件过程吗? 的相关文章

随机推荐

  • 数据 URI 的慢速页面

    我构建了一个脚本 用数据 URI 替换所有内联图像 以减少 http 请求并增加移动设备上的加载时间 不幸的是我的加载速度较慢 我认为这取决于 html 文件是否更大 大约 100kb 而不是大约 5 kb 或者数据 URI 是否有其他因素
  • 如何找到MySQL临时表存储引擎

    您好 我正在使用临时表 我想知道临时表存储引擎 InnoDB MyISAM 我正在使用以下代码来查找 但它没有向我显示存储引擎 engine SELECT ENGINE FROM information schema TABLES WHER
  • 推入用户编写的内核

    我是 Thrust 的新手 我看到所有 Thrust 演示文稿和示例仅显示主机代码 我想知道是否可以将 device vector 传递给我自己的内核 如何 如果是 那么内核 设备代码中允许对其进行哪些操作 正如最初编写的那样 Thrust
  • 使用 Angular ng-show 显示 div

    我遇到一些问题ng show and pristine 这是代码 也在 CodePen 上 http codepen io edenlyriene pen wGvKKG blockquote p comment rating Stars p
  • ICalendar 和事件更新在 Outlook 中不起作用

    我正在生成 ICalendar ics 文件 使用 UID 和 SEQUENCE 字段 我可以更新 Google 日历和 Windows 日历中的现有事件BUT NOT在 MS Outlook 2007 中 它只是创建第二个事件 如何让它们
  • 我们可以使用jdk7 javac将具有java7特性的代码编译成java6字节码吗

    我正在考虑一个java项目是否可以生成2个jar 一个用于java7 一个用于java6 是的 源代码可能会使用一些java7的新功能 因此要生成 java6 jar 命令行将如下所示 javac target 1 6 bootclassp
  • Lollipop 的 SD 卡访问 API Android?

    在另一个问题中 如何使用Android 5 0 Lollipop 新推出的SD卡访问API https stackoverflow com questions 26744842 how to use the new sd card acce
  • js中逗号运算符是如何工作的? [复制]

    这个问题在这里已经有答案了 我试图了解逗号运算符 在 JavaScript 中的工作原理 当它不放在括号之间时 它似乎有不同的行为 有人可以解释一下为什么吗 参考示例 var a 1 var b 2 var c a b console lo
  • Keras错误:预期dense_input_1有3个维度

    我正在 Keras 中尝试一个简单的模型 我想将其作为输入 大小为 5x3 的矩阵 在下面的示例中 这是通过使用指定的input shape 5 3 添加第一个致密层时 from keras models import Sequential
  • Android NetworkOnMainThreadException [重复]

    这个问题在这里已经有答案了 我得到了一个android os NetworkOnMainThreadException当我尝试从我的 PC 主机检索 JSON 数据时 这是我的代码 public JSONObject getJSONObje
  • 如何在猫鼬中找到nscanned?

    有没有办法在猫鼬中使用explain mongoose 中 db collection find explain 的等效语句是什么 这适用于 mongodb 终端 我在文档中找不到答案 不直接 但是 您可以做的是启用 Mongoose 的调
  • OpenCV获取圆上的像素

    我是 OpenCV 的新手 我正在尝试从图像中获取圆形的像素 例如 我在随机图像上画一个圆圈 import cv2 raw img cv2 imread sample picture png x 50 y 50 rad 20 cv2 cir
  • android:从页面解析html

    我想从页面中解析出一些文本 例如 有没有一种简单的方法可以将产品信息保存到字符串中 示例网址 http upcdata info upc 7310870008741 http upcdata info upc 7310870008741 T
  • 负载均衡器 $_SERVER['REMOTE_ADDR'] 不工作

    我已改用 Amazon AWS Elastic Load Balancer 现在我获得了一个私有 IP 地址 SERVER REMOTE ADDR 用于向我提供客户端的 IP 地址 现在如何获取客户端 IP 地址 您的网络服务器接收来自 A
  • 为什么添加ListView时会弹出Android键盘

    添加时我遇到一个奇怪的问题ListView到我的布局 我的布局包含 2EditText当我开始活动时 键盘不会自动弹出 但是当我添加一个ListView布局中的任何位置 活动开始时都会弹出键盘 我知道有很多方法可以隐藏键盘 如下所示 get
  • 运行总计 C#

    我正在创建一个捐赠应用程序 它读取文本框中的输入 将其转换为双精度值 然后使用该方法operatingCost 应将转换后的两倍除以 17 操作费用 目前在方法中 我有变量dontationBFees进来然后除以 17 并创建一个新变量af
  • 软键盘回车键事件句柄

    我想在软键盘上按回车键做一些事情 请参阅下面的我的代码和输出 它执行两次 但我希望它只执行一次 如何修复它 public void onCreate Bundle savedInstanceState super onCreate save
  • 在 Shiny / Leaflet / R 中通过缩放级别更改标记聚类

    我想创建一个 Web 应用程序 用户在其中输入一组标识符 并且地图上会出现与这些标识符相关的一组点 问题是 这些数据的数量可能达到数万到数十万 甚至可能数百万 考虑到这种可能性 我想采取轻松的策略 以下是我理想的聚合行为 在低缩放级别下 我
  • SVN 修订号和时间戳

    我正在尝试在 Web 应用程序的标题栏上显示最新的 SVN 修订号和时间戳 我当前的代码显示修订号 但不显示时间戳 两者都没有走到一起 我正在使用以下代码
  • Office-JS 可以触发 VBA 工作簿或工作表事件过程吗?

    我正在尝试查看是否有一种方法可以在 Office JS 中执行某些操作 从而触发事件过程在 Excel VBA 中运行 但看起来 VBA 事件在 JavaScript 代码执行期间被禁用 举例来说 我有一个工作簿 其中有一个名为 Sheet