[[20031006152304]] 『ファイルの保存日を表示したい』(みど) ページの最後に飛ぶ

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

 

『ファイルの保存日を表示したい』(みど)

ファイルを数人で共用しています。自由に書き込み更新して良い事にしていますが、自分が開いた時、誰かが書き変えたかどうか判るようにするため、ファイルの更新年月日時刻を、セル内に表示させたいのですが、できますか?


 マクロになりますが、
 【1】該当のシート見出しを右クリック
 【2】「コードの表示」をクリック
 【3】「(General)」の表示の下のウィンドウへ下記を貼り付け

 Private Sub Worksheet_Change(ByVal Target As Range)
 ActiveSheet.Cells(1, 1).Value = Format(Now(), "yyyy/mm/dd hh:mm:ss")
 End Sub

 変更があった時点の日付と時刻がセルA1に入力されます。
 マクロに自信がない、またはわからない場合は「ツール」→「変更履歴の作製」を
 お勧めします。

 (KAMIYA)


ありがとうございました。マクロには自信が無いので「ツール」でやってみましたが、よく理解出来できず、思ったようには使えませんでした。マクロの方は、何とかやりたいことが出来たので、こちらを使わせて戴くことにしました。さすがマクロという感じです。どうもマクロはレベルが高いと言うか、敷居が高くて、なかなか馴染めず苦労しています。また、いろんな人が共用するファイルを作る場合は、なるべくシンプルにしておきたいとも思っています。精進します。
(みど)


初めまして(野兎)
上記に関連しての質問(相談)です。

EXCELの表機能を用いて、[最近使ったfile]一覧表を作りたいのです。

ご承知のように、XPのスタート⇒、[最近使ったファイル(D)]という機能がありますが,
これは、表示数が少ないうえに古いものはスクロール→消去されてしまいます。

又,Excel自体にも更新履歴が出ますが,上記同様少なく,エンドレステープの如く
古いものから消されてしまいます。

その不便を無くし,且つ表示項目を増やしたいのです。
 file名,date,DIR,file種別(word,txt,jpeg,HTMLなど),容量,更新回数

マクロは、敷居が高く従来敬して遠ざけて参りました(苦笑)。
いよいよ、その機能を使わないと実現は困難な状況です。
どうぞ、先輩諸氏のご賢察、ご検討をお聞かせ下さいませ。


 EXCELのファイルに限らず、ってことでしょうか。
EXCELのVBAでやってもできると思いますが、
履歴を残してあるフォルダを開いてみるという方法はいかがでしょうか。
 
ウィンドウズのバージョンによって場所が違うでしょうが、
Recentというフォルダがハードディスク内のどこかにあります。
スタートボタンの「ファイルとフォルダの検索」で探すと早いと思います。
デスクトップなどへこのフォルダのショートカットを作成しておいて、
必要なときはこのフォルダからファイル選択されてはいかがでしょうか。
「最近使ったファイル」に表示されているよりは多く保存されています。
 
これで不都合であれば、再度ご相談なさればよいかと思います。
VBAで作成しても、このフォルダを検索することになるので、
ほぼ同じ結果になるはず。
履歴のクリアを行うと不都合があるかもしれませんが・・・。
(みやほりん)

みやほりん様へ。  野兎

  仰有る意味は分かります。

(1)確かに前のverでは、recetとか、recetlyとかのファイル名称で
 存在してました。見たことがあります。
 でも、XPになってからは,ファイル名が変わったかどうか不明ですが、
 見付からないのです(検索にも)
 そのうえ、
 情報が限定され(ファイル名だけ),それも古いものから順に消される。
 それで、今回の相談に至ったわけです。

(2)EXCEL以外のファイルも含みます

(3)(VBAで作成しても、このフォルダを検索することになる)考えを変えて
或るファイルを開いて作業を開始した時点で,
    1)そのファイル名称などの情報を**1$,**2$,**3$. . . に格納して
次に当該ファイルを終了した時点で
    2)その終了タイムを**T$に格納する
    3)EXCELの記録表ファイルに上記データを書き込む

こんなことをやらせたいのです。
以上よろしくお願いします。m(_ _")m  ペコリペコペコ


 とりあえず(1)だけ・・。
 XPの場合は、ユーザー別のファイルになるので、通常は以下のフォルダに入っていると思います。
 C:\Documents and Settings\ユーザ名\Application Data\Microsoft\Office\Recent
              ~~~~~~~~ここは、野兎さんのPCのユーザ名です。

 ※囲み文字は機種依存文字になりますので、カッコつきの数値に変えておきました。
 (川野鮎太郎)

"川野鮎太郎"さま

OK、有難う、確認取れました。

                野兎


 丸1の件についてだけです・・・
WindowsXpだと、多分C:\Document and Settings\UserName\最近使ったフォルダ にあります。
「ファイル名を指定して実行」で"Recent"と入力すれば「最近使ったファイル」フォルダが開きます
他の件は、私には敷居が高そう・・・
 # 最近使ったファイルは終了時削除するようにしているので、
 # このフォルダにどんな情報が残っているのか知らないし・・・(^^;)
   (Hatch)

"Hatch"さま

OK、有難う、確認取れました。

                野兎


 追伸:属性が隠しファイルのようなので、フォルダオプションで、全てのファイルとフォルダを表示する。
 のチェックが必要かも・・・。
 (川野鮎太郎)

 (3)の件について。
Excelである必要はありますか?
他のアプリケーションの挙動を監視する必要がありますが、
残念ながら「趣味のVBAプログラマ」程度の私にはそのような
技術がありません。
そのようなことができるかどうかもわかりません。
(どなたかがんばって作っているやもしれませんが)
 
正直申しますと、[野兎]さんの相談は「ソフトウェア開発依頼」と受け取れます。
「最近使ったファイル」の機能を拡張?するような
ソフトもフリーウェアで配布されています。
一応一本は見つけましたのでご紹介しておきます。
ただ、私自身は試してないのでご了解願います。
【整理王 動作OS:WindowsXP Windows2000 Windows98 】
http://www.vector.co.jp/soft/winnt/util/se093809.html
 
Recentフォルダの中身をチェックして新しいファイル名を
リストに追加していくような処理であればご協力できますので
ご検討ください。
(みやほりん)


"みやほりん"さま

お申し出を感謝します。
仰有る様に,(敷居の高さを野兎は痛感しておりますので、高望みせずに先ずは出来る範囲から)
"みやほりん"さんの⇒file名をリストに追加して行くだけからSTARTしたいとお考えます。
Excelの必要はないのです。見易く、追記し易いものならば何であろうとも構いません。
よろしくお願いします。

                   野兎


Recent Directoryのパス収得方法を見つけました
http://homepage2.nifty.com/Dee/vb/soft/

 '特殊フォルダの位置を取得するAPI
 Private Declare Function SHGetSpecialFolderLocation Lib "shell32" (ByVal hWnd As Long, ByVal nFolder As Long, ppidl As Long) As Long

 'IDリストからパス名に変換する
 Private Declare Function SHGetPathFromIDList Lib "shell32" Alias "SHGetPathFromIDListA" (ByVal ppidl As Long, ByVal pszPath As String) As Long

 '最近使用したファイル
 Private Const CSIDL_RECENT = &H8

 Private Sub CommandButton1_Click()
    Dim lngAdr As Long
    Dim strFixed As String * 256
    Dim strPath As String   'パス名取得用

    Dim lngRet As Long  'API戻り値用

    Dim fn As String    'filename

    '指定されたフォルダの位置を取得する
    lngRet = SHGetSpecialFolderLocation(0, CSIDL_RECENT, lngAdr)

    'IDリストからパス名に変換する
    lngRet = SHGetPathFromIDList(lngAdr, strFixed)

    '余分なパス名の除去
    strPath = Left(strFixed, InStr(strFixed, vbNullChar) - 1) & "\"

    MsgBox strPath

    'ファイル名収得
    fn = Dir(strPath)
    Do
        MsgBox fn
        fn = Dir()
    Loop While fn <> vbNullString
 End Sub

 ファイル名がfnに入っていきます。
 あとは拡張子でも見て一覧に追加して言ってはどうでしょうか

   (arqee)

"arqee"さまへ
難しそうです(恥)。
ですが、(理解できる人には)やれそうな希望が出て参りました。
この項は、copyして後学に備えます。
有難うございました。                 野兎


 もう解決されているかもしれませんが、
ショートカットのリンク先の取得はVBの分野なので、
独力では失敗。大分Webを漁ったので、かなりつぎはぎな感じがする。
 
 Sub 最近使ったファイルリスト作成()
 Dim i As Long
 Dim MyFullPath As String, MyFile As String
 Dim MyWshell As Object
 Dim MyShortCut As Object
 Rem Recentフォルダとリストを作成するシートの設定
 Const MyPath As String = "C:\WINDOWS\Recent\"
 Const MySheet As String = "Sheet1"

 Set MyWshell = CreateObject("Wscript.Shell")
    With Worksheets(MySheet)
        If WorksheetFunction.CountA(.Range("A:A")) = 0 Then
            i = 1
        Else
            i = .Cells(65536, 1).End(xlUp).Row + 1
        End If
        MyFile = Dir(MyPath, vbNormal)
        Do
            MyFile = Dir()
            If MyFile <> "" Then
                MyFullPath = MyPath & MyFile
                Set MyShortCut = MyWshell.CreateShortcut(MyFullPath)
                If WorksheetFunction.CountIf(.Range("A:A"), MyShortCut.TargetPath) = 0 Then
                    .Cells(i, 1).Value = MyShortCut.TargetPath
                    i = i + 1
                End If
            End If
        Loop Until MyFile = vbNullString
    End With
 Set MyShortCut = Nothing
 Set MyWshell = Nothing
 End Sub
 
一応形にはなっていると思う。
(みやほりん)


  たしかにAPIは難しいかもしれませんね〜。
 でも、がんばって覚えると、
 エクセルで音楽プレーヤやフォームの改造など、
 幅広く遊べるので、良いですよ。

 で、上のRecent Directoryのパスを収得するAPIと
 みやほりんさんのソースを組み合わせると、
 お望みの結果が出てくると思います。
 まずは、エクセルのマクロエディタのThisWorkbookに
 コピーアンドペーストして、マクロの実行で試してみてください。

 参考として、*.csvと*.xslのファイルだけを追加していきます。 

 '特殊フォルダの位置を取得するAPI
 Private Declare Function SHGetSpecialFolderLocation Lib "shell32" (ByVal hWnd As Long, ByVal nFolder As Long, ppidl As Long) As Long

 'IDリストからパス名に変換する
 Private Declare Function SHGetPathFromIDList Lib "shell32" Alias "SHGetPathFromIDListA" (ByVal ppidl As Long, ByVal pszPath As String) As Long

 '最近使用したファイル
 Private Const CSIDL_RECENT = &H8

 Private Sub RecentFileListMake()
    Dim i As Long
    Dim MyFullPath As String, MyFile As String
    Dim MyWshell As Object
    Dim MyShortCut As Object
    Rem Recentフォルダとリストを作成するシートの設定
    Dim MyPath As String
    Const MySheet As Integer = 1
    Const FileMark = ".csv .xls " 'ファイルの"." + 拡張子4文字の5文字ずつ
    Dim lst As String * 5
    Dim lngAdr As Long
    Dim strFixed As String * 256

    '指定されたフォルダの位置を取得する
    lngRet = SHGetSpecialFolderLocation(0, CSIDL_RECENT, lngAdr)

    'IDリストからパス名に変換する
    lngRet = SHGetPathFromIDList(lngAdr, strFixed)

    '余分なパス名の除去
    MyPath = Left(strFixed, InStr(strFixed, vbNullChar) - 1) & "\"

    Set MyWshell = CreateObject("Wscript.Shell")
    With Worksheets(MySheet)
        If WorksheetFunction.CountA(.Range("A:A")) = 0 Then
            i = 1
        Else
            i = .Cells(65536, 1).End(xlUp).Row + 1
        End If
        MyFile = Dir(MyPath)
        Do
            If MyFile <> "" Then
                MyFullPath = MyPath & MyFile
                Set MyShortCut = MyWshell.CreateShortcut(MyFullPath)
                If WorksheetFunction.CountIf(.Range("A:A"), MyShortCut.targetpath) = 0 Then
                    For j = 1 To Len(FileMark) / 5
                        lst = Mid(FileMark, j * 5 - 4, 5)
                        If InStr(Len(MyShortCut) - Len(lst), MyShortCut.targetpath, lst, vbTextCompare) > 0 Then
                            .Cells(i, 1).Value = MyShortCut.targetpath
                            i = i + 1
                            Exit For
                        End If
                    Next
                End If
            End If
            MyFile = Dir()
        Loop Until MyFile = vbNullString
    End With
    Set MyShortCut = Nothing
    Set MyWshell = Nothing
 End Sub

(arqee)


"arqee"さまへ

   再度のアドバイスに感謝してます。
   有難うございました。m(_ _")m  野兎


 ショートカットを扱った事が過去に無いので参考になります。
で、arqeeさんの↑直近のソースを実行してみて気になった部分があったので、
自分の覚え書きがてらちょっと書き込み。

 >                        lst = Mid(FileMark, j * 5 - 4, 5)
の部分で空白が残ってる為に拡張子の判定がうまくいかない様子。
 >     'Dim lst As String * 5
 >     Dim lst As String
とした上で、
 >                        'lst = Mid(FileMark, j * 5 - 4, 5)
 >                        lst = Trim(Mid(FileMark, j * 5 - 4, 5))
とするか、あるいは拡張子の判定部分の作りを…
〜〜〜〜〜
    Dim lst() As String
        :
    lst = Split(FileMark) 'FileMarkは半角スペース区切想定
    For j = LBound(lst) To UBound(lst)
        :
    Next
        :
    Erase lst
        :
〜〜〜〜
としとくと拡張子の文字数制限無くなって良いかも。
 
もひとつ、拡張子判定部分で、
 >                        'If InStr(Len(MyShortCut) - Len(lst), MyShortCut.targetpath, lst, vbTextCompare) > 0 Then
 >                        If Right(MyShortCut.targetpath, Len(lst)) = lst Then
とした方が無難っぽい。
動かしてみたら、c:\へのショートカットが存在したりする事もある様で、
その場合にエラーとなってしまった為。
(ご近所PG)Windows2000 Excel2000

コメント返信:

[ 一覧(最新更新順) ]


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