Я пытаюсь выяснить, есть ли способ сделать что-то в Office-JS, которое бы инициировало процедуру обработки события в Excel VBA, но похоже, что события VBA отключены во время выполнения кода JavaScript.
Допустим, например, что у меня есть книга с рабочим листом с именем «Лист1», и в этом модуле листа у меня есть следующий код:
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, а если нет, есть ли другое событие рабочего листа или рабочей книгичто может быть вызвано?
Немного контекста : Я пытался найти решение этого вопроса и подумалчто хорошим обходным путем было бы написать код VBA в ячейку с Office-JS, а затем использовать процедуру события Worksheet_Change для выполнения кода VBA, написанного в этой ячейке.
К сожалению, пока это не сработало,но я думаю, что стоит задать этот более конкретный вопрос, поскольку решение этой проблемы станет последним шагом к тому, чтобы позволить выполнять код VBA из Office-JS (что было бы неплохо).