VBAで完結します。フリーソフト等は使いません。 以前紹介した「複数のフォルダを開く(バッチ編) 」では開くフォルダの位置調整ができませんでしたが、この方法では開いた後に自動で等間隔でずらして表示されます。 同時に複数のフォルダを開きっぱなしにしたい人向けです。
例えば以下のフォルダを開きたい。
C:\○○試験第3相\00.DOCS
C:\○○試験第3相\10.Protocol
C:\○○試験第3相\20.aCRF
C:\○○試験第3相\30.RawData
C:\○○試験第3相\40.SDTM\41.SPEC
C:\○○試験第3相\40.SDTM\42.Main
C:\○○試験第3相\40.SDTM\42.Main\421.SRC
C:\○○試験第3相\40.SDTM\42.Main\422.Macro
C:\○○試験第3相\40.SDTM\42.Main\423.SDTM
C:\○○試験第3相\40.SDTM\43.Sub\433.SDTM
C:\○○試験第3相\40.SDTM\44.Define
C:\○○試験第3相\40.SDTM\45.P21
C:\○○試験第3相\40.SDTM\46.SDRG
C:\○○試験第3相\50.ADaM\51.SPEC
C:\○○試験第3相\50.ADaM\52.Main\521.SRC
C:\○○試験第3相\50.ADaM\52.Main\522.Macro
C:\○○試験第3相\50.ADaM\52.Main\523.ADaM
C:\○○試験第3相\50.ADaM\53.Sub\533.ADaM
C:\○○試験第3相\50.ADaM\54.Define
C:\○○試験第3相\50.ADaM\55.P21
C:\○○試験第3相\50.ADaM\56.ADRG
C:\○○試験第3相\60.TLF\61.SAP
C:\○○試験第3相\60.TLF\62.Main\621.SRC
C:\○○試験第3相\60.TLF\62.Main\622.Macro
C:\○○試験第3相\60.TLF\62.Main\623.TLF
C:\○○試験第3相\60.TLF\63.Sub\631.TLF 26個あります。上記は極端な例ですが、多くのフォルダを開き、位置を調整し、窓の大きさも調整するとかなり時間がかかります(5分くらい?)し、精神的にもまいります。 複数の試験にアサインされているときなどは、複数の試験のフォルダやファイルを同時に開いてしまうとファイルが混ざる危険性があるために、同時に開くフォルダやファイルは極力1試験分にしたい。 以下で紹介するExcelマクロを塊ごと(アサインされている試験ごととか)で作成しておくだけで一瞬(1分以内くらい)で開けます。
準備 Excelの「開発」メニューを表示する。
VBAを起動するボタンを作る
起動ボタン設置
任意のフォルダに空のExcelファイルを作成します。 ファイルを開き、ボタンを設置します。
コードを書いていく
上記でボタンを設置すると、下のダイアログが開くので適当にマクロ名を決めて「新規作成」を押す。
上記で「新規作成」ボタンを押すと、下のようなVBAエディタが立ち上がる。
標準モジュール内のコードであることを確認。
もしも標準モジュールがなかった場合は以下の要領で追加できます。
このコードを上のエディタに貼り付け
Private Sub OpenFolders()
Dim objW As Object
Dim i, j As Integer
i = 0
j = 0
Path01 = "C:\○○試験第3相\00.DOCS"
Path02 = "C:\○○試験第3相\10.Protocol"
Path03 = "C:\○○試験第3相\20.aCRF"
Path04 = "C:\○○試験第3相\30.RawData"
Path05 = "C:\○○試験第3相\40.SDTM\41.SPEC"
Path06 = "C:\○○試験第3相\40.SDTM\42.Main"
Path07 = "C:\○○試験第3相\40.SDTM\42.Main\421.SRC"
Path08 = "C:\○○試験第3相\40.SDTM\42.Main\422.Macro"
Path09 = "C:\○○試験第3相\40.SDTM\42.Main\423.SDTM"
Path10 = "C:\○○試験第3相\40.SDTM\43.Sub\433.SDTM"
Path11 = "C:\○○試験第3相\40.SDTM\44.Define"
Path12 = "C:\○○試験第3相\40.SDTM\45.P21"
Path13 = "C:\○○試験第3相\40.SDTM\46.SDRG"
Path14 = "C:\○○試験第3相\50.ADaM\51.SPEC"
Path15 = "C:\○○試験第3相\50.ADaM\52.Main\521.SRC"
Path16 = "C:\○○試験第3相\50.ADaM\52.Main\522.Macro"
Path17 = "C:\○○試験第3相\50.ADaM\52.Main\523.ADaM"
Path18 = "C:\○○試験第3相\50.ADaM\53.Sub\533.ADaM"
Path19 = "C:\○○試験第3相\50.ADaM\54.Define"
Path20 = "C:\○○試験第3相\50.ADaM\55.P21"
Path21 = "C:\○○試験第3相\50.ADaM\56.ADRG"
Path22 = "C:\○○試験第3相\60.TLF\61.SAP"
Path23 = "C:\○○試験第3相\60.TLF\62.Main\621.SRC"
Path24 = "C:\○○試験第3相\60.TLF\62.Main\622.Macro"
Path25 = "C:\○○試験第3相\60.TLF\62.Main\623.TLF"
Path26 = "C:\○○試験第3相\60.TLF\63.Sub\631.TLF"
With CreateObject("Shell.Application")
.Open Path01
Application.Wait Now() + TimeValue("0:00:01")
.Open Path02
Application.Wait Now() + TimeValue("0:00:01")
.Open Path03
Application.Wait Now() + TimeValue("0:00:01")
.Open Path04
Application.Wait Now() + TimeValue("0:00:01")
.Open Path05
Application.Wait Now() + TimeValue("0:00:01")
.Open Path06
Application.Wait Now() + TimeValue("0:00:01")
.Open Path07
Application.Wait Now() + TimeValue("0:00:01")
.Open Path08
Application.Wait Now() + TimeValue("0:00:01")
.Open Path09
Application.Wait Now() + TimeValue("0:00:01")
.Open Path10
Application.Wait Now() + TimeValue("0:00:01")
.Open Path11
Application.Wait Now() + TimeValue("0:00:01")
.Open Path12
Application.Wait Now() + TimeValue("0:00:01")
.Open Path13
Application.Wait Now() + TimeValue("0:00:01")
.Open Path14
Application.Wait Now() + TimeValue("0:00:01")
.Open Path15
Application.Wait Now() + TimeValue("0:00:01")
.Open Path16
Application.Wait Now() + TimeValue("0:00:01")
.Open Path17
Application.Wait Now() + TimeValue("0:00:01")
.Open Path18
Application.Wait Now() + TimeValue("0:00:01")
.Open Path19
Application.Wait Now() + TimeValue("0:00:01")
.Open Path20
Application.Wait Now() + TimeValue("0:00:01")
.Open Path21
Application.Wait Now() + TimeValue("0:00:01")
.Open Path22
Application.Wait Now() + TimeValue("0:00:01")
.Open Path23
Application.Wait Now() + TimeValue("0:00:01")
.Open Path24
Application.Wait Now() + TimeValue("0:00:01")
.Open Path25
Application.Wait Now() + TimeValue("0:00:01")
.Open Path26
Application.Wait Now() + TimeValue("0:00:02")
For Each objW In .Windows
If InStr(TypeName(objW.Document), "ShellFolder") > 1 Then
objW.Left = 400 + i
objW.Top = 0 + j
objW.Height = 300
objW.Width = 850
i = i + 30
j = j + 30
End If
Next
End With
End Sub
Sub ボタン1_Click()
Module1.OpenFolders
End Sub かなり冗長なコードですが、動きます。 VBAが本職ではないのでこれでよいです。
解説1
Path01 = "C:\○○試験第3相\00.DOCS" この部分に開きたいフォルダを絶対パスで記述します。 複数のパスのときは変数名を連番にします。 Path01,Path02,・・・,PathXX
解説2
With CreateObject("Shell.Application")
.Open Path01
Application.Wait Now() + TimeValue("0:00:01")
・
・
・ .Open Path01 で指定されたフォルダを開いています。
Application.Wait Now() + TimeValue(“0:00:01”) で指定された時間だけWaitを入れます。 これがないとPC環境によっては実行洩れが発生します。 開きたいフォルダの数だけ書きます。 ループにすべきですが、わからなかったのでこのままにしています。
解説3
For Each objW In .Windows
If InStr(TypeName(objW.Document), "ShellFolder") > 1 Then
objW.Left = 400 + i
objW.Top = 0 + j
objW.Height = 300
objW.Width = 850
i = i + 30
j = j + 30
End If
Next 開いたすべてのフォルダに対して開いた順に位置と大きさを調整しています。モニタの大きさによって最適値は異なるので、座標と大きさは試しながら調整してください。 ※すべてのフォルダが対象となるので、このマクロ以外で開かれていたフォルダも調整されてしまうので注意。
解説4
Sub ボタン1_Click()
Module1.OpenFolders
End Sub ワークシートに設置したボタンが押されると、このコードが呼ばれます。 内部でOpenFoldersが呼ばれることで本体に処理が移ります。
保存する際はマクロ有効(.xlsm)として保存します。
最初に作成したxlsxファイルは不要なので削除します。 もっとよい作成方法があると思いますが、動けばよいのでこれでよしとします。
使い方
ファイルを開くとセキュリティの警告がでるので「コンテンツの有効化」を押します。 作成したボタンを押すことでマクロが実行されます。
登録したフォルダが開かれ、位置と大きさも自動調整されました。
もちろんフォルダを選択する場合は画面上の該当部分のクリックだけでなく、タスクバー上からでも可能です。
コメント