DOBON.NET DOBON.NETプログラミング掲示板過去ログ

[フォルダの参照]ダイアログでのエラー

環境/言語:[Excel VBA]
分類:[VB6以前]

Excel VBA内での事なのですが、以下の様なコードで。
Dim lHwnd As Long
Dim oFolderDlg As Object

'ウィンドウのハンドルを取得
lHwnd = FindWindow(vbNullString, Me.Caption)
'フォルダ選択ダイアログ表示
Set oFolderDlg = CreateObject("Shell.Application"). _
BrowseForFolder(lHwnd, "フォルダを選択してください", &H1, "")


[フォルダの参照]ダイアログのツリービューが以下の様に出ているとします。
┌─────────────
│□デスクトップ
│>□(ユーザ名)
│>□パブリック
│>□コンピュータ
│>□ネットワーク
│>□********
│>□********
│   :

□パブリックを□デスクトップ等上までドラッグし、ドロップせずに
Escキーでキャンセルし、[OK][キャンセル][×]等をクリックすると。
以下のエラーダイアログが表示されます。
┌────────────────────────┐
│ コードの実行が中断されました。        │
│                        │
│ [継続(C)] [終了(E)] [デバッグ(D)] [ヘルプ(H)] │
└────────────────────────┘
[継続(C)]ボタンをクリックすれば継続出来る事は出来るのですが
困りますよね。

On Error Resume Nextでも回避出来ません。

何とかなりませんでしょうか?皆さんはどうしていますか?
■No24519に返信(チャロさんの記事)

BrowseForFolderで選択したフォルダ名がoFolderDlgにセットしようと
するからエラーになるんでは?
変数を別途分けてみてはどうでしょう
※ちにみに下記のソースは未検証です。

Dim lHwnd As Long
Dim oFolderDlg As Object
Dim myPath As String
'ウィンドウのハンドルを取得
lHwnd = FindWindow(vbNullString, Me.Caption)
'フォルダ選択ダイアログ表示
Set oFolderDlg = CreateObject("Shell.Application")
Set myPath = Shell.BrowseForFolder(lHwnd, "フォルダを選んでください", &H1, "")
■No24523に返信(やじゅさんの記事)

訂正:Shell→oFolderDlg
'フォルダ選択ダイアログ表示
Set oFolderDlg = CreateObject("Shell.Application")
Set myPath = oFolderDlg.BrowseForFolder(lHwnd, "フォルダを選んでください", &H1, "")
■No24519に返信(チャロさんの記事)
> [フォルダの参照]ダイアログのツリービューが以下の様に出ているとします。
この構成は Vista ですね。

> □パブリックを□デスクトップ等上までドラッグし、ドロップせずに
> Escキーでキャンセルし、[OK][キャンセル][×]等をクリックすると。
> 以下のエラーダイアログが表示されます。
なるほど、確かに On Error でもトラップできませんね。

> 何とかなりませんでしょうか?
Application.FileDialog(msoFileDialogFolderPicker) で代用するとか…。
やじゅ様
ご返答有難うございます。

示した頂いた、記述でも同じでした。


魔界の仮面弁士様
ご返答有難うございます。

> この構成は Vista ですね。
はい、そうです。

Vista+Excel2003で開発していますが。
OS・Excel共に他のバージョンではどうなんでしょうかね。
どちらにしろMicrosoftの不具合だと説明しておきます。
解決済み!
Atata!!です。

> Vista+Excel2003で開発していますが。
> OS・Excel共に他のバージョンではどうなんでしょうかね。
> どちらにしろMicrosoftの不具合だと説明しておきます。

Application.EnableCancelKey
で回避できませんか?

参考
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_090_050.html

私はVista(Ultimate)+Office2003でもEscによるコードの中断が出来なかったため、
Application.EnableCancelKey で解決できるかは試せていません。
解決済み!
■No24543に返信(Atata!!さんの記事)
> http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_090_050.html
> 私はVista(Ultimate)+Office2003でもEscによるコードの中断が出来なかったため、
おぉぅ、Esc にコードの中断という意味があったのですね。
Ctrl + Break ダケだと思っていました。φ(。。)

ドラッグ操作のキャンセルのための Escキーが、コード中断のために働いていたのですね。


> Application.EnableCancelKey
> で回避できませんか?
当方 Vista(x64) Biz/SP1 + Excel 2007/SP2 環境において、
規定値である xlInterrupt から xlErrorHandler に変更したところ、メッセージが

 実行時エラー '18':
 ユーザーによる割り込みが発生しました。

の変化し、また、On Error による制御もできるようになりました。

xlDisabled にすれば、そもそも中断もされなくなりますね。

Dim previousEnableCancelKey As XlEnableCancelKey
previousEnableCancelKey = Application.EnableCancelKey
Application.EnableCancelKey = xlDisabled
Set myPath = CreateObject("Shell.Application").BrowseForFolder(lHwnd, "フォルダを選んでください", &H1, "")
Application.EnableCancelKey = previousEnableCancelKey
解決済み!
皆様色々検証していただいたんですね。
有難うございます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板