ExcelでVBA(Visual Basic for Applications)を使って、ユーザーにファイルを選択させる際に、ファイルダイアログを開いて特定のフォルダから始めたいことがあります。たとえば、「特定のフォルダを初期表示させてファイルを選びたい」と思うことがあるでしょう。この記事では、その方法を初心者向けに解説します。
VBAでファイルを選択するためには、Application.GetOpenFilename
というメソッドを使います。しかし、GetOpenFilename は初期フォルダを直接指定できないため、別の方法を工夫する必要があります。その1つが、WScript.Shell というオブジェクトを使ってカレントディレクトリ(現在の作業フォルダ)を変更する方法です。
基本的な Application.GetOpenFilename の使い方
まず、ファイルを選択するための基本的なコードから見てみましょう。
Sub OpenFileDialog()
Dim fileToOpen As Variant
fileToOpen = Application.GetOpenFilename("All Files,*.*", ,
"ファイルを選択してください")
If fileToOpen <> False Then
MsgBox "選択されたファイル: " & fileToOpen
Else
MsgBox "ファイルは選択されませんでした"
End If
End Sub
このコードを実行すると、Excelがファイルダイアログを表示し、ユーザーはファイルを選択できます。しかし、デフォルトでは、ファイルダイアログが最後にアクセスしたフォルダから始まります。ここで特定のフォルダを初期フォルダとして指定したい場合に、少し工夫が必要です。
WScript.Shell を使って初期フォルダを設定する
GetOpenFilename には初期フォルダを直接指定するオプションはありませんが、Excel VBAでカレントディレクトリ(作業ディレクトリ)を変更することで、ファイルダイアログを開いたときに表示されるフォルダを指定することができます。
VBAでカレントディレクトリを変更するためには、WScript.Shell というオブジェクトを使います。このオブジェクトを使ってカレントディレクトリを変更し、その後 GetOpenFilename を実行することで、初期フォルダを設定したように動作させることができます。
以下はその方法を実装した例です。
初期フォルダを設定するVBAコード
Sub OpenFileWithInitialDirectory()
Dim wsh As Object
Dim fileToOpen As Variant
'
WScript.Shellオブジェクトを作成
Set wsh = CreateObject("WScript.Shell")
'
カレントディレクトリを変更(初期フォルダを設定)
wsh.CurrentDirectory = "C:\Your\Desired\Directory" ' ここに任意のフォルダパスを設定
'
ファイルダイアログを表示して、ファイルを選択
fileToOpen = Application.GetOpenFilename("All Files,*.*", ,
"ファイルを選択してください")
'
選択されたファイルがある場合の処理
If fileToOpen <> False Then
MsgBox "選択されたファイル: " & fileToOpen
Else
MsgBox "ファイルは選択されませんでした"
End If
End Sub
コードの解説
CreateObject("WScript.Shell")
ここで、WScript.Shell というオブジェクトを作成しています。このオブジェクトは、Windowsのシェル機能を使うためのもので、カレントディレクトリを変更することができます。
wsh.CurrentDirectory =
"C:\Your\Desired\Directory"
この行で、カレントディレクトリを特定のフォルダに変更しています。例えば、"C:\Your\Desired\Directory"
の部分を実際に初期表示させたいフォルダに置き換えてください。これにより、次にファイルダイアログが表示されたとき、そのフォルダが最初に開かれるようになります。
Application.GetOpenFilename
GetOpenFilename メソッドは、ファイルを選択するための標準的なダイアログを開きます。ここで初期フォルダとして設定したフォルダが表示されます。
選択されたファイルを確認
GetOpenFilename でユーザーがファイルを選択した場合、そのファイルパスが変数 fileToOpen に格納されます。選択されたファイルがあるかどうかをチェックし、メッセージボックスで選択されたファイルのパスを表示します。
カレントディレクトリの確認
現在のカレントディレクトリを確認したい場合は、CurDir 関数を使うことができます。たとえば、以下のコードを使うと、現在のカレントディレクトリをメッセージボックスで表示できます。
Sub ShowCurrentDirectory()
MsgBox "現在のカレントディレクトリは: " & CurDir
End Sub
このようにして、カレントディレクトリがどこになっているかを確認することができます。
注意点
カレントディレクトリの変更は、その時点での作業ディレクトリに影響を与えますが、他のVBAコードや操作に支障をきたすことはほとんどありません。ファイルダイアログを使う場合だけでなく、ファイルを開いたり保存したりするときにも、このカレントディレクトリが影響する可能性があります。
GetOpenFilename でファイルを選択した後、カレントディレクトリを元に戻す必要がある場合は、選択前にカレントディレクトリを記録しておき、操作後に元のディレクトリに戻すことも可能です。
Dim originalDir As String
originalDir = CurDir ' 現在のディレクトリを保存
' カレントディレクトリを変更してファイルダイアログを表示
' ...
' 処理後に元のディレクトリに戻す
ChDir originalDir
まとめ
Excel VBA でファイルダイアログの初期フォルダを指定するには、WScript.Shell オブジェクトを使ってカレントディレクトリを変更する方法が簡単で実用的です。初心者でもこの方法を使えば、ファイルダイアログを表示したときに任意のフォルダからスタートできるようになります。ぜひ試してみてください!
0 件のコメント:
コメントを投稿