[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ThisWorkbook.Pathをフォルダ選択ダイアログ設定時のエラーを解消させたいです。』(山川海湖)
失礼いたします。どうぞよろしくお願いいたします。
以下のコードを実行し、開いた「フォルダ選択ダイアログボックス」のOKを押すと、
「パスが存在しません。パスを確認して再実行してください。」
のエラーダイアログが出てしまいます。
Dim myFolder As Variant
With Application.FileDialog(msoFileDialogFolderPicker) 'ユーザがフォルダを選べる
.InitialFileName = ThisWorkbook.Path If .Show <> 0 Then '×やキャンセルがされた時のエラー対策 myFolder = .SelectedItems(1) '選択されたフォルダパスを(1個だけ)取得 With CreateObject("WScript.Shell") .CurrentDirectory = myFolder End With Else MsgBox "キャンセルされました" Exit Sub End If End With
「フォルダ選択ダイアログボックス」のフォルダパスには、
ThisWorkbookが存在しているフォルダがきちんと選択されていますが、
実は、OKボタンの上側の「フォルダー名(N):」の欄にも、
その最後の(そのパスの最下位の)のフォルダ名が(再度のように)自動表示されていまして、
つまり、「最下位フォルダ名内の最下位フォルダ名」を選択みたいな意味となっているようで
前述でのエラー内容の意味としましては、
「最下位フォルダ名」内に「最下位フォルダ名」が存在しないエラーのようです。
その「フォルダー名(N):」に入っているフォルダ名を
Deleteなどで消してOKを押すと問題なくマクロを作動できますが、
できることならば、そのDeleteの一手間を(毎回なので)無くしたいです。
なぜ、このようになり、どうすれば可能でしょうか?
「.InitialFileName = ThisWorkbook.Path」などの記述方法(や活用方法)が正しくないのでしょうか?
お分かりになられましたら、ご教授いただけましたらありがたい次第です。
お手数で誠に恐縮ですが、どうぞよろしくお願いいたします。
< 使用 Excel:Microsoft365、使用 OS:Windows10 >
つまり、前述のとおり、ダイアログ下部のOKボタンの上側の「フォルダー名(N):」
にも初期表示される「aaa」をDeleteなどで削除してからOKボタンを押しますと
問題なく、正しくフォルダが選ばれるのですが、できましたら
毎回のことになりますから、この「手動で削除する手間を省略させたい」のです。
「.InitialFileName = ThisWorkbook.Path」の使い方が下手か誤りでしょうか?
お手数で誠に恐縮ですが、ご教授いただけましたらありがたいです。
お分かりになられましたら、何卒どうぞよろしくお願いいたします。
(山川海湖) 2023/04/10(月) 01:39:14
>おそらく、「C:\\aaa\aaa」の意味となり、エラーが出ると思われます。
やってから質問しましょう (推測?) 2023/04/10(月) 02:36:44
.InitialFileName = ThisWorkbook.Path を .InitialFileName = ThisWorkbook.Path & "\" として下さい。
# >そのDeleteの一手間を(毎回なので)無くしたいです。 # それなら、ダイアログすら必要なく、単に # myFolder = ThisWorkbook.Path # として、それをカレントフォルダに変更すればよいのでは?
(xyz) 2023/04/10(月) 06:11:56
「& "\" 」と語尾を付け加えて動作を試してみましたら
私が作りたかった様に上手くできました。ありがとうございます。
(ちなみに、これの有る無しで、どんな意味の違いになるのでしょうか?)
また、「myFolder = ThisWorkbook.Path」の書き方の場合、
処理は勝手に始めてくれましたが、私が作りたかった構造は、
「ユーザーがフォルダを探さなくても良い、かつ、自由に設定・変更できる」
を実現させたかったですので、前述の「& "\" 」を末尾に追加することで
それが実現できましたので解決できました。
ただ、今回は私はこのように作りたかったですが、今後の何かで
フォルダを操作させずに作る必要がある場合には、
今回ご教授頂けました方法で作る為の引き出しが1つ増えました。
xyzさん、色々とご教授頂けましてどうもありがとうございました。
またよろしければどうぞよろしくお願いいたします。
(山川海湖) 2023/04/11(火) 07:06:14
FileDialog.InitialFileName プロパティは、 Application.FileDialog(msoFileDialogFilePicker) というファイル選択などとも共用で使われます。
その関係もあって、 .InitialFileName = "D:\aaa\bbb\ccc" とすると cccというファイルと解釈されて、表示されるのでしょう。
.InitialFileName = "D:\aaa\bbb\ccc\" とすると、 "D:\aaa\bbb\ccc\"フォルダが対象で、 表示するものは "" という解釈がされるのでしょう。
MS社が定めた仕様なので、ユーザーが変更はできないですね。 仕様に応じた使い方をするほかありません。 (xyz) 2023/04/11(火) 08:23:38
FileにもFolderにも対応できるということは、良く解釈しますと、
ある意味、万能なのかもしれませんが、万能であるがゆえにこそ、
具体的に役割を明確に書くことが重要ということですかね。
この学びを通して、理解途上かもしれません私なりにも思えたことは、
確かに、フォルダーを指定したいのであれば、\マークまでを
明確に書くのが筋なのかなとも思えました。
実際に、「.InitialFileName = ThisWorkbook.Path & "\"」まで書くことで
私の想定する動作をしてくれていますから、やはり、書き手となる自分自身が
きっちりとしたコードを正確に書くことが大切だと学べた気がします。
ただ、ワークブックのパスというのは、ブック名までは入らないのですね。
私の勝手な第一印象では、ブック名まで入るのかと思っていました。
パスというのは、その前のフォルダまでなのですかね。
とはいえ、xyzさんも書いて下さいました様に、
単なる文字列では、フォルダ名かファイル名か、あいまいになる余地を
残してしまうので、フォルダならば、「\まで明記」が確実ということですかね。
「仕様に応じた使い方をするほかありません。」とのことですが、
フォルダだと明記する必要があるという筋としても間違えてはいない気もしました。
xyzさん、ご教授やアドバイスやフォローを誠にありがとうございます。
またよろしければどうぞよろしくお願いいたします。
(山川海湖) 2023/04/12(水) 00:14:36
>ただ、ワークブックのパスというのは、ブック名までは入らないのですね。 >私の勝手な第一印象では、ブック名まで入るのかと思っていました。
本当に勝手な第一印象ですな フルパスと言うのがある。 聞いてばかりでなく、本でも買ってもっと勉強しな。 (あきれ顔) 2023/04/12(水) 00:25:57
FullName の方が良いか (あきれ顔) 2023/04/12(水) 00:29:32
私なりに調べてみたりして、.FullName、.Path、.Nameの違いを
認識できました。ヒントを頂けましてどうもありがとうございました。
Sub フォルダやファイルやパス()
With ThisWorkbook MsgBox "ThisWorkbook.FullName = " & .FullName _ & vbCrLf & "ThisWorkbook.Path = " & .Path _ & vbCrLf & "ThisWorkbook.Name = " & .Name End With End Sub
あきれ顔さん、ご教授やアドバイスやフォローを誠にありがとうございました。
またよろしければどうぞよろしくお願いいたします。
(山川海湖) 2023/04/16(日) 22:04:05
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.