答えてねっとは、
マイクロソフトが運営する
パソコンに関する
Q&Aサイトです。

 

質問

Excel2003 VBAで、最新の更新日時のファイルを開きたい。

製品名:Office製品/Excel/2003

現象:知りたい/プログラミング

懸賞ポイントが設定されています。 300

この質問は解決で締め切られています

Excel2003のマクロを使ってPCに保存されているファイルを開きたいのですが、ファイル名に含まれる数字部分が毎回変わります。
保存先は一定なので、「特定フォルダに保存されている最新更新日時のファイル」を開けないでしょうか。

ご参考までに保存先とファイル名(サンプル)は;
C:\Documents and Settings\(ユーザー名)\My Documents\Report\元データ\wk19.txt
です。
パスの「元データ」フォルダまでは変更無しですが、開くテキストファイル名の数字部分(↑の例だと 19、必ず2桁)は「先週の週数」を表しているので、毎回変わります。
ただし(繰り返しになりますが)開きたいのは常に『元データフォルダ内の最新の更新日時ファイル』ということになります。

よろしくお願い致します。

質問者からのコメント

  • 投稿日時:2009/05/13 16:14

らーめん食べたい様、ktn様、ありがとうございました。

>らーめん食べたい様
ご明察のとおり、「最新ファイルを開けない」ではなく「最新ファイル名が取得できない」が問題点でしたね。頂いたコードでできました。
targetに格納されるファイル名は他の操作にも使えるので便利です。
コメントをつけてくださったので、とてもわかりやすかったです。ありがとうございました。

>ktn様
「FileSearchオブジェクトのExecuteの使用例」を、おっしゃるとおりLastModifiedの降順にして .FoundFiles(1) を変数に入れることで、目的のファイルを開くことができました。
.FoundFiles(1) の結果には、パスもつくのですね。ありがとうございました。

回答1 (この回答は質問に対する回答です)

  • 投稿ID:A2009084694
  • 投稿日時:2009/05/12 11:25

引っかかってるのは最新ファイルを取得する部分・・・だと思うので


Sub 最新ファイル()
  Const path = "C:\Documents and Settings\(ユーザー名)\My Documents\Report\元データ\"
  Const file = "*.txt"
  Dim check As String   'チェックするファイル
  Dim target As String  '見つけた最新ファイル
  Dim chkedate As Variant 'targetの更新日付
  '最初のファイルを取得
  check = Dir(path & file, vbNormal)
  If check <> "" Then
    '最初のファイルが取得できたならば、とりあえずそれを最新ファイルとする
    target = check
    chkedate = FileDateTime(path & check)
  End If
  'ファイルが存在する間はループする
  While check <> ""
    'checkが最新ファイルかどうか確認する
    If chkedate < FileDateTime(path & check) Then
      'checkが最新ファイルなのでtargetとchkedateをcheckで更新する
      target = check
      chkedate = FileDateTime(path & check)
    End If
    '次のファイルを取得
    check = Dir
  Wend

  If target <> "" Then
    MsgBox "最新ファイルは " & path & target
  Else
    MsgBox "ファイルがないぽ"
  End If
End Sub

#インデントのために全角スペースを入れているので、全角スペースを半角スペース2個に置換してから貼り付けてください。

  •  

回答2 (この回答は質問に対する回答です)

  • 投稿ID:A2009084853
  • 投稿日時:2009/05/12 16:14
  • 最も役に立った投稿として評価されました

FileSearchオブジェクトで所定のフォルダから所定のファイルをワイルドカードで検索実行(Excecute)する際に,結果(foundfiles)を例えばLastModifiedの降順とかで並べ替えた結果で返させるといった使い方が出来ます。その1番目がいま欲しいファイルになりますね。

VBAのヘルプのFileSearchオブジェクトのExecuteの使用例に,ほぼそのまま使えるサンプルマクロが載ってますので参考にしてみてください。
不明の点が出てきたら,遠慮無く追加ご質問を投稿してみてください。



  •  

答えてねっと

昨日の利用状況


総投稿数 431 件

回答総数 337 件

登録者数 27 人

利用登録ユーザ 1510 人

ゲスト 243581 人

ページビュー 427949

登録済みFAQ 20 件

景品応募サイト

Windows ヘルプと使い方

マイクロソフトドリームスパーク