7

我正在处理一个 excel 表,在 xll 插件的帮助下,我正在尝试更新数据。我按 Ctrl+Alt+F9 开始计算,但计算在任何按键或单元格选择处停止。有没有办法覆盖此功能或错误?

这在 Excel 2003 上不会发生。

4

3 回答 3

2

非常好的问题!

不确定这是否适用于您的 C# 插件,但使用 Excel 2010 应用程序对象模型,您可以使用Application.CalculationInterruptKey在按下键时停止数据计算的中断。未经测试,但这可以是它。

在开头应用此CtrlAltF9

Dim lKey As Long
lKey = Application.CalculationInterruptKey
Application.CalculationInterruptKey = xlNoKey

然后在计算结束时,将其重置为原来的值或将其更改为默认xlAnyKey

Application.CalculationInterruptKey = lKey ' Or xlAnyKey

如果您有其他事件触发的 Subs,您可能需要添加有关Application.CalculationState的行,以便它不会在Application.CalculationState = xlDone.

希望这可以帮助。

于 2014-01-03T03:46:17.500 回答
0

尝试关闭 UserControl、EnableEvents 并将计算设置为手动:

private static XlCalculation xlCalculation = XlCalculation.xlCalculationAutomatic;
static public void TurnOffApplicationSettings(Excel.Application xlApp)
{
    xlApp.ScreenUpdating = false;
    xlApp.DisplayAlerts = false;
    xlCalculation = xlApp.Calculation; //Record the current Calculation Mode
    xlApp.Calculation = XlCalculation.xlCalculationManual;
    xlApp.UserControl = false;
    xlApp.EnableEvents = false;
}

然后运行您的长时间操作并将 UserControl 和 EnableEvents 恢复为 true 并将计算恢复为 Automatic (或更准确地说,它是以前设置的):

static public void TurnOnApplicationSettings(Excel.Application xlApp)
{
    xlApp.ScreenUpdating = true;
    xlApp.DisplayAlerts = true;
    xlApp.Calculation = xlCalculation;
    xlApp.UserControl = true;
    xlApp.EnableEvents = true;
}
于 2014-01-07T02:13:13.827 回答
0

为什么你需要在计算过程中选择一个单元格 - 有什么原因你不能等到它完成吗?在计算期间选择/更改单元格是危险的,因为数据可能尚未正确计算。

如果您只是担心意外按键 - 这应该可以防止任何意外按键

Sub SetUpUserInterface()

Dim Current As Worksheet

    For Each Current In Worksheets
        Current.Protect , UserInterfaceOnly:=True
        'Current.Protect Password:="", UserInterfaceOnly:=True
    Next

End Sub
于 2013-12-26T16:32:38.743 回答