1

私は、C# で Excel アドイン (VSTO) を開発しました。これには、ツリー ビューを含む作業ウィンドウがあります。ツリー ビューをクリックすると、一部のデータが Excel シートに読み込まれます。しかし、ロード後もフォーカスはツリー ビューに残っているため、シートをクリックせずにセルに直接入力することはできません。ツリー ビューをクリックしてシートが作成されるとすぐに、アクティブなワークシートにフォーカスを移す必要があります。次の方法を試しましたが、うまくいきませんでした

ActiveSheet.Select()
ActiveSheet.Activate()

そして、範囲も設定してみました。もう1つのことは、ブレークポイントを追加すると、ブレークポイントに到達したActiveSheet.Activate()後に機能しますが、それがなくてもタスクペインにフォーカスが保持されることです。

4

3 に答える 3

1

SendKeys.Send("{F1}") アプローチはうまくいきませんでした。何が起こっているかというと、完全にアクティブ化されていないことを除いて、既にアクティブ化されていると思われるウィンドウをアクティブにしようとしているのだと思います。

そのため、別のウィンドウをアクティブにして、Excel が適切に非アクティブ化されていることを確認してから、Excel を再アクティブ化する必要があります。ただし、ちらつきや奇妙さをユーザーに見せたくありません。私にとってうまくいったアプローチは次のとおりです。

  1. デスクトップのハンドルを取得する
  2. デスクトップ ハンドルで SetForegroundWindow を呼び出す
  3. メインの Excel ハンドルで SetForegroundWindow を呼び出す

[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);
于 2014-09-02T20:23:05.643 に答える