[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ファイルの保存日を表示したい』(みど)
ファイルを数人で共用しています。自由に書き込み更新して良い事にしていますが、自分が開いた時、誰かが書き変えたかどうか判るようにするため、ファイルの更新年月日時刻を、セル内に表示させたいのですが、できますか?
マクロになりますが、 【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.