OpenSaveDialogクラス for VBA
2002/08/14
<解説>
OpenSaveDialogクラスは、DelphiユーザーがAccessやExcelでVBAを使用する際、DelphiのTOpen/SaveDialogとほぼ同一のプロパティ・メソッドで、開く/保存ダイアログを表示可能にします。
このクラスは、Delphi6のDialogs.pasにあるTOpen/SaveDialogの中核部分をVBAに移植したものです。そのため、Delphiと同一のプロパティ・メソッド名を使用しており、ソースもなるべくDialogs.pasと同じようなコーディングになるように仕上げました。ぜひともソースを比較してみてください。
<使用環境>
Access2000/Excel2000での動作を確認しています。これより下のバージョンでは動きません。ただ、動かない原因は、下位バージョンでサポートしていない文法を使っているためなので、その辺りを代替してやれば動くと思います。
OSは、Windows95と2000で動作の確認をしました。2000以降のOSならば、Placeバーのある新ダイアログが表示されます。
<制限事項>
言語の違いや作者の手抜きにより制限事項があります。
- OpenDialogとSaveDialogは、1つのクラスに同居している。
VBAは、1ファイル1クラスなので、2つのクラスを1ファイルに同居させられないためです。このため、新しくDialogTypeプロパティを導入して、両者を選択できるようにしてあります。
- Optionsプロパティは、集合型ではなく列挙型。
VBAが集合型をサポートしていないためです。なお、Access/Excel97では列挙型もサポートしていないので、使いたい場合は単なる定数として宣言しなおしてください。
- Filesプロパティは、TStringList等価ではなく、単なる動的配列。
さすがにTStringListと同じ物を作りたくはないので、動的配列で代替しました。ほとんどの場合は値の取得で満足するはずですから。動的配列なので、要素を後ろに増やす芸当も出来ます。
- ダイアログが中央に表示されない。
中央から外れて表示されます。コーディングで中央に表示することも可能ですが、あえてやめました。なぜかというと、ソースファイルを1つにしたかったからです。中央に表示するにはフックプロシージャを使うのですが、このプロシージャは標準モジュールに記述する必要があります。そうすると、クラスモジュールと標準モジュールの2ファイルないと動かなくなります。プロジェクトを作るたびに2ファイル読みこむのがめんどくさい、という作者の怠慢が理由です。中央に表示したい場合は、こちらを参照してください。
- Windows3.1スタイルの古いダイアログは、考慮していません。
さすがに使う人はいないでしょう。
<インストール方法>
一応書いておきます。
- ダウンロードしたファイルを解凍すると「OpenSaveDialog.cls」が作成されます。
- VBAエディタを起動します。
- メニューから「ファイル→ファイルのインポート」を選択します。
- 「OpenSaveDialog.cls」ファイルを選択してインポートします。
- プロジェクトのクラスモジュールにインポートされます。
これで、クラスとしてどのモジュールからでも利用可能になります。
<コーディング例>
Private Sub ShowDialog()
Dim OpenDlg As OpenSaveDialog
Dim Msg As String
Dim i As Integer
Set OpenDlg = New OpenSaveDialog 'クラス作成
With OpenDlg
.DialogType = dtOpenDialog 'ここでダイアログの種類を指定
.DefaultExt = "mdb"
.Filter = "Microsoft Access データベース (*.mdb)|*.mdb|すべてのファイル (*.*)|*.*"
.Options = .Options Or ofFileMustExist Or ofPathMustExist
'↑ファイルを複数選択する場合は、ofAllowMultiSelect を加える
If .Execute Then
MsgBox .FileName
'↓ファイルを複数選択した場合は、Filesから取り出す(動的配列)
'For i = LBound(.Files) To UBound(.Files)
' Msg = Msg & .Files(i) & vbCrLf
'Next i
'MsgBox Msg
End If
End With
End Sub
|
- SetとNewでOpenSaveDialogクラスを作成します。
- DialogTypeプロパティで、開く・保存ダイアログの種類を決めます。指定しないとdtOpenDialogが設定されます。
- Optionsプロパティを指定します。ここは列挙型なので、指定したい要素をOrでつなぎます。また、要素から削除するにはXOrを使用します。なお、ある要素が含まれるか調べるために「InSetOf」関数を用意してあります。
- ダイアログの表示には、おなじみのExecuteメソッドを使用します。
- 実行された場合は、FileNameプロパティまたはFilesプロパティに値が返ってきます。
<プロパティとメソッド>
◇プロパティ
DefaultExt As String '拡張子を付けなかった場合のデフォルト拡張子
DialogType As OpenSaveDialogType 'ダイアログの種類(Open/Save)
FileName As String '表示/選択されたファイル名
Files() As String '動的配列 '表示/選択された複数ファイル名
Filter As String '拡張子のフィルタ
FilterIndex As Integer 'デフォルトで表示するフィルタのインデックス
InitialDir As String 'デフォルトで表示するフォルダ
Options As OpenOptions 'ダイアログオプション
OptionsEx As OpenOptionsEx '拡張ダイアログオプション(Win2k/ME以降)
Title As String 'ダイアログのタイトル
Tag As Variant 'タグ
|
◇メソッド
Execute As Boolean 'ダイアログの実行(成功: True キャンセル: False)
|
<ダウンロード>
OpenSaveDialogクラス for VBA
Copyright 2002 H'Imagine.
All rights reserved.