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

时间:2016-02-03 18:36:27

标签: excel vsto excel-addins

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

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

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

1 个答案:

答案 0 :(得分:1)

我找到了如何避免崩溃:

第一步是设置其他内容,而不是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即将发布(如果还没有)。