今回は、
Application.GetOpenFilename
を使って、フォルダを開く方法に加えて、表示されるフォルダを、ネットワーク上のドライブが初期フォルダとして現われるるように、パスを取得するやり方です(^^)
多くの方のお知恵を拝借して出来上がりました!ありがとうございますm(__)m
Application.GetOpenFilenameを使ってダイアログを開く
(コピペすると、5行目の「 – 」が「?」になってしまうかと思いますので、「? 」を 「- 」半角に書き換えてください)
Sub folfile()
Dim pa As String
Dim wbs As String
With ThisWorkbook
pa = Left(.Path, InStrRev(.Path, “\”) – 1)
End With
With CreateObject(“wscript.shell”)
.currentdirectory = pa
End With
wbs = Application.GetOpenFilename(FileFilter:=”Microsoft Excelブック,*.xls?”, _
Title:=”ファイルを選択してください”, MultiSelect:=False)
If wbs = “False” Then
MsgBox “キャンセルされました”
Exit Sub
End If
Workbooks.Open (wbs)
End Sub
↑
ネットワーク上にあるファイル(ThisWorkbook)の一つ上のフォルダが、ダイアログに現れて、指定すると開かれるプロシージャです。
変数は、パス(文字列型:String)の pa と、
ブック名(文字列型:String)の wbs を宣言して用意します。
まずは、ネットワーク上のドライブにあるファイルの一つ上のフォルダを、変数 pa へ、文字列型でしまいます。
↓
With ThisWorkbook
pa = Left(.Path, InStrRev(.Path, “\”) – 1)
End With
これにて pa に、パスを取得できました!(ローカルウィンドウやイミディエイトウィンドウから確認して見てくださいね)
Left関数に、InStrRev関数を入れ込んで、最後の文字から\ 迄の文字位置を検索し、そこから -1 の文字位置までを pa へ返してくれています。
なので、自ファイルのあるフォルダなら、
With ThisWorkbook
pa = .Path
End With
とすればよいです。
そして、カレントフォルダに pa を指定します。
↓
With CreateObject(“wscript.shell”)
.currentdirectory = pa
End With
そして、Application.GetOpenFilename を使用しダイアログを表示しつつ、同時に wbs へ、ブック名をしまいます。(GetOpenFilenameなので、名前を変数にしまいます)
↓
wbs = Application.GetOpenFilename(FileFilter:=”Microsoft Excelブック,*.xls?”, _
Title:=”ファイルを選択してください”, MultiSelect:=False)
キャンセルを押された時のために、if 文で分岐は付けておきます。
↓
If wbs = “False” Then
MsgBox “キャンセルされました”
Exit Sub
End If
そして、↓ ワークブック wbs をオープンして完了です。
Workbooks.Open (wbs)
開いたファイルを、変数Workbookにしまって使い回す!
ダイアログからファイルを開いて、そのままで終わる実務もないと思いますので、
ここで開いたブックを、ワークブック変数 wb にしまって、
その後そのブックを行ったり来たりして作業する、という流れを作りたいと思います。(コピペすると、5行目の「 – 」が「?」になってしまうかと思いますので、「? 」を 「- 」半角に書き換えてください)
↓
Sub folfile2()
Dim pa As String
Dim wbs As String
Dim wb As Workbook
With ThisWorkbook
pa = Left(.Path, InStrRev(.Path, “\”) – 1)
End With
With CreateObject(“wscript.shell”)
.currentdirectory = pa
End With
wbs = Application.GetOpenFilename(FileFilter:=”Microsoft Excelブック,*.xls?”, _
Title:=”ファイルを選択してください”, MultiSelect:=False)
If wbs = “False” Then
MsgBox “キャンセルされました”
Exit Sub
End If
Set wb = Workbooks.Open(wbs, ReadOnly:=True, UpdateLinks:=False)
ThisWorkbook.Activate
wb.Activate
End Sub
↑
Dim wb As Workbook にて宣言しておき、最後のブックオープン時に、wbへワークブック変数として、set を使って変数にしまいます。
↓読み取り専用
ReadOnly:=True
↓リンクの更新をしない(聞かれる度に止まりますので)
UpdateLinks:=False
↓マクロのあるファイルをアクティブに
ThisWorkbook.Activate
↓ダイアログから開いたファイルをアクティブに
wb.Activate
2つ以上のファイルを行ったり来たり、コピペして集計する作業は多々あると思うので、このやり方を覚えておくととっても便利なので、今回もここに備忘録に置いておきます。
今回も、たくさんのネット検索と ↓ こちらの大事典で学ばせて頂きました。
この本を買うと高いのですが、kindleの読み放題だと、1ヶ月980円(2023年5月時点)で読み放題なのでお得です♪
先人の知恵に感謝して終わりますm(_ _)m
コメント