Excelの操作時に、下図のようなメッセージボックスを何度も見かけたことがあるだろう。
マクロを使うと、任意のタイミングでこのメッセージボックスを表示させることもできる。
今回は、前回作成したマクロにこのメッセージボックスを表示させるコードを実装し、データ取得ファイルの使い勝手の向上を目指す。
サンプル
今回使うサンプルは下記ボタンから入手可能である。
圧縮ファイル内のマクロ「exp4_comp.xlsm」のベースは、前回作成したデータファイルの取得マクロと同じである。
今回はメッセージボックスを表示させるコードを中心に解説し、それ以外のコードの詳細については上記記事を参照してもらうことにする。
コード詳説
今回は、データファイルを取得するマクロにメッセージボックスを表示するコードを追加した。
Sub データファイルの取得()
Dim FD As FileDialog
Dim FolderPath As String
Dim myFile As String
Dim FileEx As String
Dim i As Long
Dim j As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
FileEx = Worksheets(1).Cells(3, 7).Value
Set FD = Application.FileDialog(msoFileDialogFolderPicker)
If FileEx = "" Then
MsgBox "データファイルの拡張子を指定してください。", vbExclamation
ElseIf FD.Show = True Then
FolderPath = FD.SelectedItems(1)
myFile = Dir(FolderPath & "\*." & FileEx)
i = Worksheets.Count
j = Worksheets.Count
If FileEx <> "" Then
Do While myFile <> ""
Workbooks.OpenText Filename:=FolderPath & "\" & myFile
Cells.Select
Selection.Copy
ActiveWindow.Close
Sheets.Add After:=Worksheets(i)
With Worksheets(i + 1)
.Name = myFile
.Paste
.Hyperlinks.Add Anchor:=Cells(1, 5), _
Address:="", _
SubAddress:="'" & Worksheets(1).Name & "'" & "!A1", _
TextToDisplay:=Worksheets(1).Name
.Cells(1, 1).Select
End With
With Worksheets(1)
.Activate
.Hyperlinks.Add Anchor:=Cells(i + 7, 2), _
Address:="", _
SubAddress:="'" & Worksheets(i + 1).Name & "'" & "!A1", _
TextToDisplay:=Worksheets(i + 1).Name
End With
myFile = Dir()
i = i + 1
Loop
End If
If FileEx <> "" And i = j Then
MsgBox "指定した拡張子のファイルがありません。", vbExclamation
End If
End If
Worksheets(1).Cells(1, 1).Select
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
コード自体はそこまで複雑なものではなく、基本は
MsgBox “テキスト”
を記述することで、テキスト込みのメッセージボックスを表示させることができる。
テキストの後ろに引数を追加することもでき、引数によって表示やボタンの種類を指定することもできる。
ではここで、実際に実装したコードを見ていく。
今回追加したメッセージボックスは2つある。
If FileEx = "" Then
MsgBox "データファイルの拡張子を指定してください。", vbExclamation
ElseIf FD.Show = True Then
もともと分岐構文の始めは「FD.Show = True」(ダイアログボックスが表示されて「OK」ボタンが押される)だったが、その前に1つ目のメッセージボックスを表示する分岐を入れている。
「FileEx = “”」すなわちファイルの拡張子を入力する欄が空欄である場合は、ダイアログボックスを表示する前に「拡張子が指定されていないから探せません。指定してください」という警告を出すようにした。
引数として「vbExclamation」を追加すると、警告のマーク(黄色の三角形に感嘆符)がメッセージボックスに表示される。
実際のメッセージボックスは下図のようになる。
If FileEx <> "" And i = j Then
MsgBox "指定した拡張子のファイルがありません。", vbExclamation
End If
2つ目は、拡張子は指定されているが、選択したフォルダ内に指定した拡張子のファイルが存在しない場合に「ファイルが見つかりません」と警告するようになっている。
拡張子が指定されている必要があるため、条件に「FileEx <> “”」(ファイルの拡張子を入力する欄が空欄以外である)がつく。
もう1つの条件「i=j」だが、最初はiとj両方にデータファイル取り込み前のシート数が格納される。
しかしその後、iには取り込まれたデータファイルの数が加算されるが、jには何も加算されない。
もし指定した拡張子のファイルが存在すれば、iは初期値より大きな値となり、最終的にはi≠jとなるはずである。
これは裏を返せば、i=j(iが初期値から動いていない)ならばデータファイルが取り込まれていない、すなわち指定したフォルダ内に指定した拡張子のファイルが存在していないことになる。
実際のメッセージボックスは下図のようになる。
終わりに
今回はメッセージボックスを表示させるようにして、よりアプリに近い感覚で使えるようにマクロをブラッシュアップした(そこまで大げさなものではないが)。
次回は、取り込んだ生データから必要なデータを抽出して表示させる機能を追加しようと思う。
END
コメント