[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ユーザーフォーム内でファイルパスの取得』(はとむぎ)
ユーザーフォームのリストボックスにフォルダ内のエクセル名を表示しています。現時点では問題無く動いていますが、「会議資料・・・・」のフォルダは将来的に保存場所を変更される可能性があります。
保存場所を変更しても、問題無く動くようにしたいのですが、フォルダのパスを取得する事が出来ず、上手くいきませんでした。
開いているファイルとリストボックスに表示させたいファイルは同じフォルダに存在してます。(移動後も変わらず)
お力をお貸し頂きたく、宜しくお願いします。
Private Sub UserForm_Initialize()
Dim buf As String Dim Y As Long Const Path As String = "会議資料\22年上期\売上集計表(内訳)\" Y = Year(Now) buf = Dir(Path & Y & "*.xls") ' Y で 2022年ファイルのみを表示 Do While buf <> "" ListBox1.AddItem buf buf = Dir() Loop
End Sub
< 使用 Excel:Excel2016、使用 OS:Windows10 >
ThisWorkbook.Path でマクロブック(自ブック)が格納されているフォルダ のパスを取得します。
https://tonari-it.com/excel-vba-thisworkbook-path/
(OK) 2022/06/16(木) 18:14
なお、ThisWorkbook.Pathは定数で宣言しないようにしてください。 変数で宣言してください。 (OK) 2022/06/16(木) 18:16
>フォルダのパスを取得する事が出来ず、
>開いているファイルとリストボックスに表示させたいファイルは同じフォルダに存在してます。
お悩みのポイントがよくわかりません。ブックが保存されているフォルダなら[Path]プロパティでわかりますよ。
保存したことのあるブックをアクティブにしてから↓をイミディエイトに入力してみてください。
?ActiveWorkbook.path
なお、保存したことのないブックを対象にすると、エラーにはならず""が返されるのでご注意ください。
(もこな2 ) 2022/06/16(木) 18:21
Const Path As String = "会議資料\22年上期\売上集計表(内訳)\"
Pathのドライブや親フォルダが書いてないので、カレントフォルダからの相対パスになります。
これを変更したいとすれば、どこかのセルとかにフォルダ名を入れておくのがいいです。
Dim Path As String Path = Range("パスが入力されているセル") ' "会議資料\22年上期\売上集計表(内訳)\"
移動されたフォルダを自動で探すとかはハードル高すぎです (´・ω・`) 2022/06/16(木) 18:27
参考まで。
[[20190924153754]] 『保存場所の変更』(ローム)
(OK) 2022/06/16(木) 18:31
結果、「 & "\" 」の部分が抜けていた事がわかり、解決しました。
お騒がせしてすみませんでした。
Private Sub UserForm_Initialize()
Dim buf As String, P As Variant Dim Y As Long
P = ThisWorkbook.Path & "\" Y = Year(Now) buf = Dir(P & Y & "*.xls") ' Y で 2022年ファイルのみを表示
Do While buf <> "" ListBox1.AddItem buf buf = Dir() Loop
End Sub
(はとむぎ) 2022/06/16(木) 18:41
当初は ThisWorkbook.Path で取得したフォルダ内のファイルを表示させる事が目的で解決したのですが、一つ前の階層のフォルダ内にあるファイルを表示する必要が発生。
ネット検索したのですが、思うように出来ず、困惑しています。
(はとむぎ) 2022/06/28(火) 17:35
■1
(1)パスを右端から見ていき、何文字目に\があるか調べる (2)頭から(1)文字目までを取り出す
■2
(1)FileSystemObjectを使ってフォルダを取得する (2)(1)の親フォルダを取得して出力する
■3
コードにしてみるとこんな感じ
Sub さんぷる1() Const フォルダパス As String = "C:\Work\aaa\iii\uuu" Dim i As Long
i = InStrRev(フォルダパス, "\") MsgBox Left(フォルダパス, i) End Sub '============================================================================ Sub さんぷる2() Const フォルダパス As String = "C:\Work\aaa\iii\uuu" Dim フォルダ As Object
Set フォルダ = CreateObject("Scripting.FileSystemObject").GetFolder(フォルダパス) MsgBox フォルダ.ParentFolder.Path & "\" End Sub
(もこな2 ) 2022/06/28(火) 18:18
有難うございます。
アドバイス参考にして、トライしてみます。
(はとむぎ) 2022/06/28(火) 18:22
更に下記の通りでは選択した時点で開こうとしてしまいますが、本当はボタンを押してから表示させたいです。
Private Sub UserForm_Initialize()
Dim buf As String, P As Variant Dim Y As Long
P = ThisWorkbook.Path & "\..\" buf = Dir(P & "03*.xls")
Do While buf <> "" ListBox1.AddItem buf buf = Dir() Loop
End Sub
Private Sub ListBox1_Click()
Workbooks.Open Filename:=ListBox1.Value
End Sub
(はとむぎ) 2022/06/28(火) 19:31
(もこな2 ) 2022/06/28(火) 19:50
ListBox1.Valueは、ファイル名だけですよ、
(マナ) 2022/06/28(火) 20:06
ありがとうございます。
マナさん ご指摘通りでした。
解決出来ました。
(はとむぎ) 2022/06/28(火) 20:08
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.