none
windowsVistaのOSでExcelが画面の裏に隠れる RRS feed

回答

  • Excelが前面にでましたが、常に最前面に表示されてしまいます。
    TopMost以外の方法がないのなら、こちらの方法を使いたいと思います。
    おっと、そういえば TOPMOST にしてしまうと常に最前面に出てしまいますね。

    試したわけではないですが、AppActivate 関数を使うというのはどうでしょうか。

    AppActivate 関数

    引数は、Application オブジェクトの Caption とかを指定するのかな。
    2010年2月10日 19:07
  • Excelがすでに起動しているばあい、フォアグラウンドウィンドウをとれる条件に当てはまらないはずなので、Visible = trueで前に来ない、と言うことのはずです。
    自分のフォームがForegroundにあるなら、SetForegoundWindow APIを使用すれば、Excelをアクティブに出きます。
    #ただし、この場合、Excelでの処理が終わったあとで、自分のフォームをフォアグラウンドに戻せない可能性がありますけど。
    <System.Runtime.InteropServices.DllImport("user32.dll")> _
    Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As Boolean
    End Function
    
    xlApp.Visible = True 
    call SetForegroundWindow(xlApp.hWnd)


    jzkey
    2010年2月10日 12:01
  • SetForegoundWindow ってNT・98 の頃は結構多用してましたけど
    2000以降(だったっけ?)から制約が多くなったという話で、Windows 2000 だとまともに動作しなかった覚えがあります。

    まして Vista だと・・・どうでしょう?

    #つーかまだ提供されているのかな?
    2010年2月10日 14:01
    モデレータ
  • AppActivateで思ったとおりの動きをしました。
    ありがとうございました。
    a-
    • 回答としてマーク アー 2010年2月12日 6:57
    2010年2月12日 6:54

すべての返信

  • SetWindowPos で HWND_TOPMOST にしてやるというのはいかがでしょうか。
    2010年2月10日 8:32
  • 返信ありがとうございます。
    Excelが前面にでましたが、常に最前面に表示されてしまいます。
    TopMost以外の方法がないのなら、こちらの方法を使いたいと思います。


    a-
    2010年2月10日 11:00
  • Excelがすでに起動しているばあい、フォアグラウンドウィンドウをとれる条件に当てはまらないはずなので、Visible = trueで前に来ない、と言うことのはずです。
    自分のフォームがForegroundにあるなら、SetForegoundWindow APIを使用すれば、Excelをアクティブに出きます。
    #ただし、この場合、Excelでの処理が終わったあとで、自分のフォームをフォアグラウンドに戻せない可能性がありますけど。
    <System.Runtime.InteropServices.DllImport("user32.dll")> _
    Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As Boolean
    End Function
    
    xlApp.Visible = True 
    call SetForegroundWindow(xlApp.hWnd)


    jzkey
    2010年2月10日 12:01
  • SetForegoundWindow ってNT・98 の頃は結構多用してましたけど
    2000以降(だったっけ?)から制約が多くなったという話で、Windows 2000 だとまともに動作しなかった覚えがあります。

    まして Vista だと・・・どうでしょう?

    #つーかまだ提供されているのかな?
    2010年2月10日 14:01
    モデレータ
  • Excelが前面にでましたが、常に最前面に表示されてしまいます。
    TopMost以外の方法がないのなら、こちらの方法を使いたいと思います。
    おっと、そういえば TOPMOST にしてしまうと常に最前面に出てしまいますね。

    試したわけではないですが、AppActivate 関数を使うというのはどうでしょうか。

    AppActivate 関数

    引数は、Application オブジェクトの Caption とかを指定するのかな。
    2010年2月10日 19:07
  • AppActivateで思ったとおりの動きをしました。
    ありがとうございました。
    a-
    • 回答としてマーク アー 2010年2月12日 6:57
    2010年2月12日 6:54
  •  SetForegroundWindowを試しましたが、画面の前に出たり出なかったりと不安定な動きでした。
    a-
    2010年2月12日 6:56
  • 回答としてマークは、解決するのに役に立った投稿につけましょう。

    ※スレッドをクローズするために自分に発言につけるものではありません。
    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2010年2月12日 11:15
    モデレータ