Excel加载项焦点未返回到活动工作表

时间:2013-08-13 06:15:29

标签: excel focus add-in cell

我在c#中开发了一个excel加载项(VSTO),其中有一个带树视图的任务窗格。当我单击树视图时,它会将一些数据加载到Excel工作表。但是在加载后,焦点仍然保留在树形视图中,因此我无法直接在单元格中键入而不单击工作表。一旦单击树视图填充工作表,我就需要将焦点放在活动工作表上。我尝试了以下方法,但没有运气

ActiveSheet.Select()
ActiveSheet.Activate()

我也试过设定范围。 另一件事是,当我向ActiveSheet.Activate()添加一个断点时,它会在达到断点后起作用,但如果没有它,它仍会将焦点保持在任务窗格上。

3 个答案:

答案 0 :(得分:4)

经过努力,我找到了一个简单的解决方案

SendKeys.Send( “{F1}”);

这简直解决了我的问题。但是很奇怪,因为实际上F2是正确的键,但它不起作用。只有F1有效。

答案 1 :(得分:1)

SendKeys.Send(“{F1}”)方法对我不起作用。我认为正在发生的事情是我们正在尝试激活一个认为它已经被激活的窗口,除了它没有被完全激活。

因此,我们需要激活另一个窗口以确保正确停用Excel,然后重新激活Excel。但是,我们不希望用户看到任何闪烁或怪异。对我有用的方法是:

  1. 获取桌面的句柄
  2. 在桌面句柄上调用SetForegroundWindow
  3. 在主Excel句柄上调用SetForegroundWindow
  4. [的DllImport( “USER32.DLL”)]
    public static extern int GetDesktopWindow();

    [DllImport(“user32.dll”,CharSet = CharSet.Auto)]

    private static extern bool SetForegroundWindow(IntPtr hWnd);

    SetForegroundWindow(GetDesktopWindow());
    SetForegroundWindow(excelHandle);
    

答案 2 :(得分:0)

对于使用Add-in Express创建Excel加载项的任何人,您可以使用ADXKeyFilter事件并将默认处理程序参数的Action属性设置为ADXKeyFilterAction.SendToHostApplication