• ベストアンサー

開いたときの位置を指定する事は可能ですか?

Sub Sample() Dim myFile As String myFile = "C:\Program Files (x86)\" Shell "C:\Windows\Explorer.exe " & myFile, vbNormalFocus End Sub これでフォルダを起動させているのですが 開いたときの位置を指定する事は可能ですか? TOP=0 など、IE操作の様に画面に対する位置を指定したいのですが どうすればいいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

こんにちは。お邪魔します。 エクスプローラーにフォルダーを表示させた後に、何をしたいのか、 という目的が詳しければ、それに特化した方法が色々とあることにはなります。 Office各アプリケーションに用意されたFileDialog等を用いることで 簡単に済む場合も多くのケースで考えられますし、 各種のUIを必要な機能だけに整理してデザインして ユーザーにとっての扱い易さを優先させたい場合もあるのではないでしょうか。 エクスプローラーにフォルダーを表示させた、その後、のことを考えると、 エンドユーザーによる操作の結果をVBAに返したい場合とか、 エンドユーザーにこちらが期待した通りの継続的処理を期待する場合とか、 周辺での仕事の方が、結構難しいことになりそうな気がします。 こちらでは、目的は謎のままなので、ご要望に副う形にお応えしてはみますが、 目的に最適な方法である、と断言出来るようなものではありませんので、 そちらで、再度、詳しく検証なさってみてください。 以下は、一例として、比較的簡単で、且、ご提示のソースを踏襲したものです。 ' ' // Option Explicit Private Declare PtrSafe Function ShowWindow Lib "user32" ( _   ByVal hwnd As LongPtr, ByVal nCmdShow As Long) As Long Sub ReW9207003() Dim oShell As Object ' As Shell32.Shell ' Dim myFile As String Dim cnWnd As Long ' ' [Shellオブジェクト] で エクスプローラー操作の準備をしつつ、カウントを採る   Set oShell = CreateObject("Shell.Application") ' New Shell32.Shell '   cnWnd = oShell.Windows.Count ' ' [Shell関数] で エクスプローラー に フォルダー を 表示 ' ' (ウィンドウステートは指定を無視して直前の状態を参照して最大化される環境もある)   myFile = "C:\Program Files (x86)\"   Shell "C:\Windows\Explorer.exe " & myFile, vbNormalFocus ' ' [Shellオブジェクト].Windows が 更新されるまで 待機 ' ' (待機しただけでは同期が不完全な環境もある)   Do     DoEvents   Loop Until oShell.Windows.Count > cnWnd ' ' [Shellオブジェクト].Windows で 今表示したエクスプローラー を 捉えて ' ' ウィンドウステート、位置、サイズ を 指定する   With oShell.Windows(oShell.Windows.Count - 1)     myFile = .Name ' 同期をとる為のダミー処理     ShowWindow .hwnd, vbNormalFocus ' ウィンドウステート:標準(元の大きさ)     .Left = 150 ' 位置 x ◆     .Top = 100 ' 位置 y ◆     .Width = 500 ' サイズ x ◆     .Height = 300 ' サイズ y ◆   End With End Sub ' ' //

BZTPYYORJR
質問者

お礼

ありがとうございました。

その他の回答 (2)

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんにちは もし、デスクトップ画面上での表示位置を指定したいので有れば、 ユーザーフォームで自作してはどうですか?

BZTPYYORJR
質問者

お礼

ありがとうございました。

回答No.1

Windows エクスプローラのコマンドライン オプション https://support.microsoft.com/ja-jp/kb/152457 が参考になるかと思います。 たとえば shell "explorer.exe /select,C:\Program Files (x86)\Internet Explorer" でInternet Explorerフォルダが選択された状態で開かれます。 TOP=0 の意味するものを理解できていませんが フォルダの中で三番目のフォルダを指定・・・なら C:\Program Files (x86)フォルダ内を走査し 三番目(あれば)のフォルダ名を取得 そのフォルダ名を、Shell・・・・の中に渡す という流れかと思いますが Explorer.exeでのソート順と合致する必要があります。

BZTPYYORJR
質問者

お礼

ありがとうございました。

関連するQ&A