これを展開するシステムをある程度制御でき、Visual StudioまたはMicrosoft HTML Help がインストールされていることが十分に確実な場合は、次のようなコードを使用できます。
function filedialog(filt, def, title, save)
set dialog = CreateObject("MSComDlg.CommonDialog")
dialog.MaxFileSize = 256
if filt = "" then
dialog.Filter = "All Files (*.*)|*.*"
else
dialog.Filter = filt
end if
dialog.FilterIndex = 1
dialog.DialogTitle = title
dialog.InitDir = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
dialog.FileName = ""
if save = true then
dialog.DefaultExt = def
dialog.Flags = &H800 + &H4
discard = dialog.ShowSave()
else
dialog.Flags = &H1000 + &H4 + &H800
discard = dialog.ShowOpen()
end if
filedialog = dialog.FileName
end function
また、この質問に対する他の回答の 1 つを VBScript コードに適合させて (@oddacorn に感謝します!)、ユーザーが VS または HTML ヘルプを使用することが合理的に確信できない場合は、この関数を追加する必要があります。プログラムの起動時にこの関数を呼び出します。すでに鍵を持っていても心配はいりません。その場合、これは効果がありません。これは、管理者権限のない標準ユーザー アカウントで機能するはずです。
'Make the MSComDlg.CommonDialog class available for use. Required for filedialog function.
function registerComDlg
Set objRegistry = GetObject("winmgmts:\\.\root\default:StdRegProv")
objRegistry.CreateKey &H80000001, "Software\CLASSES\Licenses\4D553650-6ABE-11cf-8ADB-00AA00C00905"
objRegistry.SetStringValue &H80000001, "Software\CLASSES\Licenses\4D553650-6ABE-11cf-8ADB-00AA00C00905", "", "gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj"
end function
ここで、HTML の VBScript コードの「ソースの表示」から filedialog 関数を適用したことに注意してください。最新の Web ブラウザーでは、コード サンプルをレンダリングするために使用する HTML が正しく表示されないようです (IE 8 および Chrome でテスト済み)。しかし幸いなことに、コードはまだ View Source に残っています。
これを Windows 7 (SP1、完全にパッチ適用済み) で機能させるために重要なことが 1 つあります。設定しないと実行dialog.MaxFileSize = 256
時エラーが発生します。
つまり、次のコードは Windows 7 SP1 では失敗しますが、古いバージョンの Windows ではおそらく動作します。
Set x = CreateObject("MSComDlg.CommonDialog")
x.ShowSave