Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2019)
変動するファイル名を開きたい
投稿日時: 22/11/22 11:57:11
投稿者: カールおじさん

現在使用しているファイルから、ダウンロードしたファイルを下記コードで開きたいのですが
[ファイル名]の部分がダウンロードするたびに、reserve reserve (1) reserve (2) reserve (3)のように変わってしまいます。
最新版を1つだけ(この場合(3)が最新版ですが、初回ならreserveになります)しか残してありませんが、
reserve * のように指定すると、[指定したファイルが見つかりません]と表示されてしまいます。
残してある[ファイル名]の部分をどのように指定すればよいでしょうか。ご教示ください。
 
    p = ThisWorkbook.Path
    l = Len(p)
    q = Left(p, l - 10)
    'fname = ThisWorkbook.name
    Workbooks.Open Filename:=q & "ファイル名.csv"
 

回答
投稿日時: 22/11/22 12:32:08
投稿者: taitani
投稿者のウェブサイトに移動

ファイルの更新日時を見て、最新版を取得するといいかもですね。
 
<参考>
https://www.tipsfound.com/vba/18013

回答
投稿日時: 22/11/22 12:49:00
投稿者: taitani
投稿者のウェブサイトに移動

因みに、ファイル名は、「reserve *」 ではなく、
Workbooks.Open Filename:=q & "reserve*.csv"
ですね。

投稿日時: 22/11/22 14:05:24
投稿者: カールおじさん

taitaniさん
ご指摘のようにしても結果は同じく[指定したファイルが見つかりません]になってしまいます。
reserve とか reserve (3)とか具体的に指定すると、ちゃんと開きますが reserve* にすると駄目です。

回答
投稿日時: 22/11/22 15:01:15
投稿者: 半平太

こんなのでワークしないですか?
 
> Workbooks.Open Filename:=q & "ファイル名.csv"
     ↓
   Workbooks.Open Filename:=q & Dir(q & "reserve*.csv")

回答
投稿日時: 22/11/22 15:40:38
投稿者: taitani
投稿者のウェブサイトに移動

引用:
reserve とか reserve (3)とか具体的に指定すると、ちゃんと開きますが reserve* にすると駄目です。

 
似たようなファイルを用意 (test_1.csv、test_2.csv、test_3.csv) して実行しましたが、問題なく動作しました。
 
実際のファイル名 2〜3 個そのまま貼り付けることは可能でしょうか。

回答
投稿日時: 22/11/22 16:26:42
投稿者: WinArrow
投稿者のウェブサイトに移動

こんな感じで、できると思いますが・・・・
 

Dim NewFNAME As String, CurFNAME As String

    q = Left(ThisWorkbook.Path, InStrRev(ThisWorkbook.Path, "\"))
    NewFNAME = ""
    CurFNAME = Dir(q & "reserve*.csv")
    Do
        If CurFNAME > NewFNAME Then
            NewFNAME = CurFNAME
        End If
        CurFNAME = Dir()
    Loop Until CurFNAME = ""
    If NewFNAME <> "" Then
        Workbooks.Open Filename:=q & NewFNAME
    End If

回答
投稿日時: 22/11/22 16:34:42
投稿者: taitani
投稿者のウェブサイトに移動

うーん、例えば、ファイル削除するのを忘れたとかの場合、意図したファイルが開かれない場合がありますよね?
 
ブラウザからダウンロードしているのであれば、ダウンロードフォルダに自動的に保存 (キャッシュ)ではなく、
毎回名前を付けて保存が動作するようにして、reserve.csv に上書きするとかの方がリスクが少ないと思いますよ。
あと、もし、削除し忘れても、上に記載した 「ファイルの更新日時を見て」ってのも実装が必要かと。
基本的なリスク回避も考えた方がいいと思いますー

回答
投稿日時: 22/11/22 16:36:59
投稿者: taitani
投稿者のウェブサイトに移動

こういう感じの回避策。

    q = Dir(q & "\" & "reserve*")
    
    Do While q <> ""
        If MsgBox(q & " を開きますか?", vbYesNo) = vbYes Then
            Set wb = Workbooks.Open(p & "\" & q)
            i = i + 1
        End If
        q = Dir()
    Loop
    Set wb = Nothing

    

回答
投稿日時: 22/11/22 22:09:27
投稿者: WinArrow
投稿者のウェブサイトに移動

特定文字列を含むファイル名をダイアログで選択できるようにするには、
 
Application.Dialogs(xlDialogOpen).Show "reserve*.csv"
 

使う方法もあると思います。

投稿日時: 22/11/22 22:26:47
投稿者: カールおじさん

皆さんありがとうございました。
半平太さんの
 q & Dir(q & "reserve*.csv")
で、reserve も reserve (3)も開くことができました。