在 Excel 中禁用快捷方式的替代方法

Alternative way to disable shortcut in Excel

在 Excel 2007-2013 年,我使用 Application.OnKey 禁用快捷方式

Application.OnKey("{F5}", "")

但在 Excel 2016 年它引发了 Excel 的崩溃(稍后爆炸,然后我按 F5)。我想这是新 Excel 中的一些错误,也许有一天它会被修复,但现在我需要一个解决方法,另一种禁用快捷方式的方法。有什么建议吗?

我找到了避免崩溃的方法:

第一步是设置其他内容,而不是 Application.OnKey

中的空字符串
Application.OnKey("{F5}", " ")

如果您不理会它,Excel 将显示有关错误宏名称的消息。

我在按键事件发生时临时设置 Application.DisplayAlerts = false 删除了这条消息:

static int HookCallback(int nCode, IntPtr wParam, IntPtr lParam) {
    if (nCode < 0) {
        return (int) WinApi.CallNextHookEx(_hookID, nCode, wParam, lParam);
    }
    if (nCode == HC_ACTION) {
        ExcelAddIn.ExcelApp.DisplayAlerts = false;
        ExecuteAsync(() => {
            ExecuteInUIThread(() => {
                OnKeyPress((uint) wParam);
                Application.DisplayAlerts = true;
            });
        });
    }
    return (int) WinApi.CallNextHookEx(_hookID, nCode, wParam, lParam);
}

但在那之后我发现这个错误已经被修复并且 fix version 将很快发布(如果还没有的话)。