Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10158 / 13644 ツリー ←次へ | 前へ→

【23314】フォルダの参照 ほびっと 05/3/18(金) 16:51 質問[未読]
【23315】Re:フォルダの参照 Jaka 05/3/18(金) 16:58 回答[未読]
【23329】Re:フォルダの参照 ほびっと 05/3/18(金) 17:46 質問[未読]
【23345】Re:フォルダの参照 ちゃっぴ 05/3/19(土) 0:09 回答[未読]
【23349】Re:フォルダの参照 ほびっと 05/3/19(土) 7:16 お礼[未読]
【23356】Re:フォルダの参照 Kein 05/3/19(土) 11:04 回答[未読]
【23398】Re:フォルダの参照 ほびっと 05/3/21(月) 10:04 質問[未読]

【23314】フォルダの参照
質問  ほびっと  - 05/3/18(金) 16:51 -

引用なし
パスワード
   下記にて「デスクトップ」(一番上の)を選択した場合、「実行時エラー91」となってしまいます。
何か良い回避策はないでしょうか?
それから、ダイアログにて選択フォルダのデフォルトを指定することは可能でしょうか。
よろしくお願いいたします。

Sub fff()
  Dim objShl As Object
  Dim strMsg As String, strFld As String
  strMsg = "フォルダを選択します。"
  Set objShl = CreateObject("Shell.Application").BrowseForFolder(Application.Hwnd, strMsg, &H1)
  If objShl Is Nothing Then Exit Sub
  strFld = objShl.Items.Item.Path
  Debug.Print strFld
End Sub

【23315】Re:フォルダの参照
回答  Jaka  - 05/3/18(金) 16:58 -

引用なし
パスワード
   ▼ほびっと さん:
>下記にて「デスクトップ」(一番上の)を選択した場合、「実行時エラー91」となってしまいます。
>何か良い回避策はないでしょうか?
>それから、ダイアログにて選択フォルダのデフォルトを指定することは可能でしょうか。

目やす箱にフォルダの選択トピックがありますから見てみてね!
>「デスクトップ」(一番上の)を選択した場合
は、BOTTAさんのコードが参考になると思います。

【23329】Re:フォルダの参照
質問  ほびっと  - 05/3/18(金) 17:46 -

引用なし
パスワード
   Jakaさん 回答ありがとうございます。
目安箱参照しました。
おかげさまで、「デスクトップ」(一番上の)を選択した場合のエラーは回避できました。ありがとうございました。

ですが、ダイアログにて選択フォルダのデフォルトを指定する方法が分かりませんでした。
(ルートの指定は分かりましたが)。

引き続きアドバイス願えませんでしょうか。よろしくお願いします。

【23345】Re:フォルダの参照
回答  ちゃっぴ  - 05/3/19(土) 0:09 -

引用なし
パスワード
   >ですが、ダイアログにて選択フォルダのデフォルトを指定する方法が分かりませんでした。
>(ルートの指定は分かりましたが)。

Shell32 の BrowseForFolder では出来ません。

やるとすれば、SHBrowseForFolder API を使用して、
CallBack関数をつかって実装するという感じになります。

APIでしかもCallBack関数を使用するので、難易度は劇高です。

まあ、Jakaさんが掲示したところにSample Upしておいたので
興味があったら覗いてください。

【23349】Re:フォルダの参照
お礼  ほびっと  - 05/3/19(土) 7:16 -

引用なし
パスワード
   ちゃっぴさん、ありがとうございます。
サンプル拝見しました。
難しそうですが、頑張って挑戦してみます。
ありがとうございました!

【23356】Re:フォルダの参照
回答  Kein  - 05/3/19(土) 11:04 -

引用なし
パスワード
   >ダイアログにて選択フォルダのデフォルトを指定

Sub fff()
  Dim objShl As Object
  Dim strFld As String
  Const strMsg As String = "フォルダを選択します。"
  Const DefFol As String = "C:\Program Files"
  
  Set objShl = CreateObject("Shell.Application") _
  .BrowseForFolder(0, strMsg, 0, DefFol)
  If objShl Is Nothing Then Exit Sub
  strFld = objShl.Items.Item.Path
  Debug.Print strFld
End Sub

てな感じで、出来ます。

【23398】Re:フォルダの参照
質問  ほびっと E-MAIL  - 05/3/21(月) 10:04 -

引用なし
パスワード
   Keinさん、ありがとうございます。
レス遅くなってすみません。

この方法だとルートフォルダが指定されてしまいます。

質問の仕方が悪かったみたいですね。すみません。

指定したいのはルートフォルダではなく、デフォルトで選択されるフォルダで、このフォルダより上位のフォルダを選択できる必要があります。

10158 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free