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