※問題の要件を満たしていれば正解としてください。
まずダイアログボックスを表示させるコードを記述します。
[code]
file = Application.GetOpenFilename()
[/code]
変数fileにダイアログボックスで選択したファイルのパスが入ります。
次に選択されたファイルを開くにはWorkbooksコレクションのOpenメソッドを使います。
[code]
Workbooks.Open Filename:=file
[/code]
「Filename:=」の記述は省略してもOKです。
変数fileにはパスが入っているので、それを指定してあげます。
▼実際に試したのがこちら
sample.xlsxというファイルを指定し開くことができました。
さらに
上記の処理だけではダイアログボックスを表示しキャンセルを押した場合の処理が書いていません。
実際に動かしキャンセルを押してみると以下のようにエラーがでてしまいます…。
このエラーを回避すべく、条件文を記述します。
キャンセルが押された際のGetOpenFilenameメソッドの返り値は「False」になるので、
その場合は開く処理を行わないようにします。
[code]
‘ ダイアログボックスを表示しパスを取得
file = Application.GetOpenFilename()
‘ Falseではないときだけ開く処理を行う
If file <> "False" Then
Workbooks.Open file
Else
MsgBox "キャンセルが押されました。"
End If
[/code]
開く処理を行うのはGetOpenFilenameメソッドの返り値が「False」以外のときだけ、
という風にコードを記述しました。
▼実際に試したのがこちら
「キャンセルが押されました。」と表示されたことから開く処理が行われなかったということが確認できました。
さらにさらに
問題文に指定されたエクセルブックと書いてあるので、
ダイアログボックスに表示されるファイルの種類のフィルターもかけましょう。
これをしないとエラーになるわけではないですが、ファイルの種類のフィルターをかけた方が使い勝手が良いです。
GetOpenFilenameメソッドの引数を指定することでフィルターをかけることができます。
[code]
file = Application.GetOpenFilename("Excel ブック, *.xls?")
[/code]
引数は、ファイルの種類, 表示したいファイルの拡張子となります。
上記の場合ファイルの種類に「Excel ブック」を指定し、
ワイルドカード(?の記号)を使い「xls」からはじまる拡張子のファイルをフィルタリングしている、ということになります。
▼実際に試したのがこちら
フィルターをかける前
フィルターをかけたあと
Excelブックで拡張子がxlsからはじまるファイルのみフィルタリングされました。
解説が長くなってしまったので、最終的にどういうコードになったかを記載します。
[code]
file = Application.GetOpenFilename("Excel ブック, *.xls?")
If file <> "False" Then
Workbooks.Open file
Else
MsgBox "キャンセルが押されました。"
End If
[/code]