dポイントプレゼントキャンペーン実施中!

Sub Sample()
Dim i As Long
i = Shell("notepad.exe", vbNormalFocus)
End Sub

このコードだと、多分前回開いた時と同じ位置・大きさで開いてしまうのですが、

Sub Sample()
Dim objIE As InternetExplorer
Set objIE = CreateObject("InternetExplorer.application")

objIE.Visible = True
objIE.Top = 0
objIE.Left = 0
objIE.Width = 500
objIE.Height = 500

Set objIE = Nothing
End Sub

のように、サイズを指定して開く方法はありますか?

メモ帳に限らず、Shell関数を使ってアプリケーションを開くときに
サイズや位置を指定する方法を教えてください。

A 回答 (1件)

Shell は、実行ファイルを実行するだけ、つまりメモ帳などを起動するだけの関数です。

メモ帳のようにオートメーションに対応していない(CreateObject で作製できない)アプリケーションでは、起動後に API 関数で設定することになるかと思います。

参考 URL では、Shell で起動したウィンドウを AppActivate でアクティブにし、そのハンドル(Windows が管理に用いている各ウィンドウの番号)を GetForegroundWindow で取得し、GetWindowPlacement で位置・大きさを取得し、その一部を修正して SetWindowPlacement で設定しています。

余談ですが、質問文のように位置などを指定せず単に起動するだけなら、次のとおり変数の宣言は不要です。

Sub Sample()
Shell "notepad", vbNormalFocus  '「notepad.exe」でもよい
End Sub

参考URL:http://www.moug.net/tech/acvba/0010014.html
    • good
    • 0
この回答へのお礼

CreateObject関数を使わずに開くアプリケーション(=オートメーションに対応していないアプリケーション)
を操作する場合はAPIを使えばいいのですね。

とてもわかりやすい説明ありがとうございます。

APIでやってみます。
私の提示したコードは、iは余計だったようですね。

お礼日時:2013/06/14 22:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!