[[20220616175119]] 『ユーザーフォーム内でファイルパスの取得』(はとむぎ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ユーザーフォーム内でファイルパスの取得』(はとむぎ)

ユーザーフォームのリストボックスにフォルダ内のエクセル名を表示しています。現時点では問題無く動いていますが、「会議資料・・・・」のフォルダは将来的に保存場所を変更される可能性があります。
保存場所を変更しても、問題無く動くようにしたいのですが、フォルダのパスを取得する事が出来ず、上手くいきませんでした。

開いているファイルとリストボックスに表示させたいファイルは同じフォルダに存在してます。(移動後も変わらず)

お力をお貸し頂きたく、宜しくお願いします。

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つ上のフォルダは..ピリオド2つで指定できます。
c:\data\01\..\はc:\data\になります。
(ax) 2022/06/28(火) 18:09

>一つ前の階層
いくつか方法はあるとおもいますが、以下のいずれかがお手軽ではないでしょうか?

■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


axさん、もこな2さん 

有難うございます。
アドバイス参考にして、トライしてみます。
(はとむぎ) 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


相対パスは自信がないので、直接の回答にはなりませんが↓を読んでみてはどうですか?
[[20220418232124]] 『階層の違うブックからシートをコピーしたい』(メガネ)

(もこな2 ) 2022/06/28(火) 19:50


>>Workbooks.Open Filename:=ListBox1.Value

ListBox1.Valueは、ファイル名だけですよ、

(マナ) 2022/06/28(火) 20:06


もこな2さん マナさん

ありがとうございます。

マナさん ご指摘通りでした。
解決出来ました。

(はとむぎ) 2022/06/28(火) 20:08


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.