執筆:EugeneAmnis
Excel 2019 for Mac でのファイル選択ダイアログについて
Excel 2019 for Mac の VBA についてでも軽く触れましたが、自分で VBA を含め多くの言語でプログラムを組む際、ファイル選択ダイアログは案外使う場面が多いのではないでしょうか?
前回の検証の結果かなり制限がかけられている事がわかりました。今回は実際に発生したエラーコードも示しながら少し詳しく説明していきたいと思います。
おさらい
Windows版で使用可能と判明しているコードをそのまま Mac版で走らせた結果、ワイルドカードを使わない Application.GetOpenFilename() のみ正常に動き、他は使用不可でした。
No | コード | Windows | Mac |
---|---|---|---|
1 | GetOpenFilename() | OK | OK |
2 | GetOpenFilename(FileFilter:=“CSV Files (*.csv), *.csv”) | OK | NG |
3 | FileDialog(msoFileDialogFolderPicker) | OK | NG |
コードとエラー内容
1.GetOpenFilename()
Sub OpenFilename()
ActiveCell.value = Application.GetOpenFilename()
End Sub
エラーなし
2.GetOpenFilename(FileFilter:=“CSV Files (*.csv), *.csv”)
Sub CsvChooser()
ActiveCell.value = Application.GetOpenFilename(FileFilter:="CSV Files (*.csv), *.csv")
End Sub
実行時エラー’1004’ オブジェクト’GetOpenFilename’メソッド’_Application’が失敗しました。
3.FileDialog(msoFileDialogFolderPicker)
Sub FolderDialog()
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
If .Show = True Then
ActiveCell.value = .SelectedItems(1)
Else
ActiveCell.value = "False"
End If
End With
End Sub
実行時エラー’91’ オブジェクト変数またはWithブロック変数が設定されていません。
VBEで確認をしてみるとツールチップがNothingと表示されました。
対策
GetOpenFilenameではワイルドカードを指定せず、ファイルの判定を自前で実装する必要があります。
FileDialog(msoFileDialogFolderPicker)ではApplescriptで実装するしか手はないようです。
FormeCollector2では上記の対策を取ってありますがコードの複雑化は避けれません。フォルダチューザーのAppleScriptはAppleScript インストール支援アプリ FormeVBAassist.app(MIT LICENSE) 内にあります。もしよろしければお使いください。
OSの判定方法はExcel VBA 内での OS 判定方法をご覧ください。