スキップしてメイン コンテンツへ

 none
[Excel VBA] 仮想デスクトップ関連の操作 (作成・削除・ウィンドウの移動など) をやるにはどうしたらいいのでしょうか RRS feed

  • 質問

  • Excel VBA (Excel 2016) で Windows 10 の仮想デスクトップを扱いたいのですが、
    いい方法ないでしょうか。
    調べてみたら現在所属している仮想デスクトップを取得することは
    IVirtualDesktopManager インターフェイスで可能らしいのでこのページを参考に
    してみました。
    (提示されていたコードは 32bit 専用のようだったので型を LongPtr や Any に
    変更するなど 64bit 対応に修正しました)

    ただ、IVirtualDesktopManager インターフェイスでは新規の仮想デスクトップの
    作成や目的の仮想デスクトップを探す方法がないみたいです。
    さらに調べると、IVirtualDesktopManagerInternal という隠しインターフェイスの
    メソッドを使うと可能みたいですが、Excel VBA で使うにはどうしたらいいでしょうか。

    具体的にやりたいのは Workbooks.Add や Workbooks.Open などで開いたブックの
    ウィンドウを処理中は見せたくないので何とかしようとしているところです。
    単に隠すだけなら Window.Visible = Flase でいいのですが、このブックにワークシートを
    追加したりなどの変更を加える必要があるためできません。
    (ワークシートの変更を加えるブックのウィンドウは表示状態でないとエラーになるため)

    仮想デスクトップを作成することと作成した仮想デスクトップを取得することさえできれば、
    移動自体は IVirtualDesktopManager.MoveWindowToDesktop でできそうです。


    • 編集済み infade 2019年11月26日 7:12 リンク忘れを修正
    2019年11月26日 7:10

すべての返信

  • ウィンドウを処理中は見せたくないので何とかしようとしているところです。

    Application.ScreenUpdating = False

    では不都合ということでしょうか。

    2019年11月26日 8:09
  • GetWindowRectで元の位置を確保しておいて、MoveWindowでデスクトップの範囲外に移動させておき、処理終了後に改めてMoveWindowで元の位置に戻すとか。
    2019年11月26日 8:12
  • ウィンドウを処理中は見せたくないので何とかしようとしているところです。

    Application.ScreenUpdating = False

    では不都合ということでしょうか。

    どうやら、最初から表示されているウィンドウに対しては有効なようですが、
    開いた時点では非表示のブック (非表示の状態で保存されているブック) の
    ウィンドウを表示状態にすると見えてしまうようです。

    また、処理中はタスクバーにも表示させたくないです。
    (一応、ウィンドウを最小化して WS_EX_TOOLWINDOW 拡張スタイルをつければ
    見えなくはなりますが・・・)

    2019年11月26日 8:32