Excel (VBA)

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

 
(Windows 10 Pro : Excel 2013)
wordで使いたい
投稿日時: 19/05/28 10:28:21
投稿者: sara

マクロ超初心者です
 
Sub Auto_Close()
Range("A1").Value = Date & " " & Time
Application.DisplayAlerts = False
ActiveWorkbook.Save
Application.DisplayAlerts = True
End Sub
 
エクセルでファイルを閉じた日時を表示するマクロを
ネットで作ってもらいました。
これをwordでも使いたいのですが方法が分かりません
 
宜しくお願いします。

回答
投稿日時: 19/05/28 11:10:09
投稿者: hatena
投稿者のウェブサイトに移動

VBA を使わなくても表示できます。
下記をご参考に。
 
最終更新日時を自動で表示 | Word2010 | 初心者のためのOffice講座
https://hamachan.info/win7/word/koushin.html
 
あっ、
ひょっとして、開いて更新せずに閉じたときの日時を記録したいということかな。
 
Document Close イベント (Word) | Microsoft Docs
https://docs.microsoft.com/ja-jp/office/vba/api/word.document.close(even)

回答
投稿日時: 19/05/28 11:17:22
投稿者: hatena
投稿者のウェブサイトに移動

文章の先頭に挿入する場合のコード例
 
 

Private Sub Document_Close()
    With ActiveDocument
        .Content.InsertBefore Text:=Now & vbCrLf
        .Save
    End With
End Sub

 

投稿日時: 19/05/28 13:20:47
投稿者: sara

hatenaさん いろいろ有難う御座います
 
先ず目的は ファイを開いて更新せず閉じた日時を表したいのです
 
Hatenaさんに送っていただいたコードをコピペして
 
苦戦しましたが、表示されるようになりました
目標はファイルを閉じた時点の日時を自動的に表示させたいので
もう少し頑張ります
 
 

回答
投稿日時: 19/05/28 13:39:12
投稿者: hatena
投稿者のウェブサイトに移動

sara さんの引用:
苦戦しましたが、表示されるようになりました
目標はファイルを閉じた時点の日時を自動的に表示させたいので
もう少し頑張ります

 
どこに表示したいのでしょうか。

投稿日時: 19/05/28 14:41:43
投稿者: sara

Hatenaさん 何度も有難う御座います
 
私の目的(目標)は
 
先ほど頂いたコードのように
wordの最初の行に ファイルを閉じた日時を表示を表示させたいのですが
 
一度表示をさせたら ファイルを閉じるたびに
その閉じた日時が自動的に更新されて表示させるようにしたいのです

回答
投稿日時: 19/05/28 14:42:33
投稿者: WinArrow
投稿者のウェブサイトに移動

>ファイルを閉じた時点の日時を自動的に表示させたいので
 
ファイルを保存せずに閉じたら、
どこに表示する(どこに記録する)かにもよりますが、
別ファイルに記録する以外に
せっかく取得した日付が保存されないと思いますが・・・・
 

投稿日時: 19/05/28 15:19:05
投稿者: sara

WinArrow さん ありがとう御座います
 
位置としては 一番最初の行の右端に表紙をさせ
(ヘッタでもいいと思っています)
 
前回閉じた時点の日時を表示させたいのです
内容は更新せず見ただけの日にちなので上書き保存せずとも良いと思ていますが
上書き保存することでその時点での日時が表示されればよいです
 

回答
投稿日時: 19/05/28 15:44:16
投稿者: hatena
投稿者のウェブサイトに移動

sara さんの引用:
位置としては 一番最初の行の右端に表紙をさせ
(ヘッタでもいいと思っています)
 
前回閉じた時点の日時を表示させたいのです
内容は更新せず見ただけの日にちなので上書き保存せずとも良いと思ていますが
上書き保存することでその時点での日時が表示されればよいです

 
上の回答で提示したコードで、そうなってるはずですが。
Saveメソッドで上書き保存してますので。
 
ただし、挿入ですので、どんどん追加されてしまいますが。
その場合は、1行目を削除するか、上書きするように改変すればいいでしょう。
 
sara さんの引用:
位置としては 一番最初の行の右端に表紙をさせ
(ヘッタでもいいと思っています)

 
ヘッダーに右寄せで表示させる場合のコード例。
 
Private Sub Document_Close()
    With ActiveDocument
        With .Sections(1).Headers(1).Range
            .Paragraphs.Alignment = wdAlignParagraphRight
            .Text = Now
        End With
        .Save
    End With
End Sub

投稿日時: 19/05/28 16:27:58
投稿者: sara

Hatenaさん 何度もコメントを頂きありがとう御座います
 
以前の日時を削除してマクロで挿入するようにして
使っていきます。
 
お手数をおかけて恐縮です
改めて ありがとう御座いました。
 

回答
投稿日時: 19/05/28 16:44:30
投稿者: WinArrow
投稿者のウェブサイトに移動

WORD文書のヘッダーに保存日時を挿入する方法(VBA使わない)
 
「挿入」タブ
「ヘッダー」−「ヘッダーの編集」
「クイックパーツ」−「SaveDate」
書式で「yyyy/mm/dd hh:mm:ss」を入力
 
ヘッダー編集を閉じる
 
ドキュメントの保存時に拡張子:「docm」を指定します。
 

回答
投稿日時: 19/05/28 18:19:36
投稿者: WinArrow
投稿者のウェブサイトに移動

 
Excelのコードについて一言
 
掲示のコードでは、本来のデータの更新がなくても
必ず、上書き保存することになってしまいます。
 
Auto_Close()
マクロではなく、↓のような方法もあります。
  
ThisworkBookモジュール
  
Private Sub Workbook_Open()
    Me.Sheets(1).Range("A1").Value = Me.BuiltinDocumentProperties("Last Save Time").Value
    Me.Saved = True
End Sub
   
意味
 当該ブックを開いたとき、前回保存した日時を1番目のシートのセルA1に取得する
コード2行目の「Saved = True」は、
データ更新がなかった場合、「上書き保存する?」問い合わせを指せないためのコードです。
 
前回保存した日時は、ファイルのプロパティに記録されています。
 
 

回答
投稿日時: 19/05/28 20:30:00
投稿者: WinArrow
投稿者のウェブサイトに移動

 
続き・・・・ 別案
  
↓こんな方法もあります。
Private Sub Workbook_Open()
    ActiveWindow.Caption = Me.Name & " 最終更新日:" & Me.BuiltinDocumentProperties("Last Save Time").Value
End Sub
 
 

投稿日時: 19/05/29 06:41:35
投稿者: sara

WORD文書のヘッダーに保存日時を挿入する方法(VBA使わない)
 
「挿入」タブ
「ヘッダー」−「ヘッダーの編集」
「クイックパーツ」−「SaveDate」
書式で「yyyy/mm/dd hh:mm:ss」を入力
 
 −−  −−−−−−−−−−−−−−−−−
 
 WinArrowさんおはよう御座います
 
上記の方法をやってみたのですが
何故か日にちが今の日時にならずとんでもない日時になってしまいます
 
 2019/23/29 06:23:00 ← になってしまいます
 
表示したい日時は、
ファイルの内容を更新しなくても、開いて閉じた日時を表示させたいのです。
 

投稿日時: 19/05/29 06:49:50
投稿者: sara

WinArrow さんの引用:

Excelのコードについて一言
 
掲示のコードでは、本来のデータの更新がなくても
必ず、上書き保存することになってしまいます。
 

 
 WinArrowさん 何度も有難う御座います
 
私の表示させたいのは
 
「データの更新」がなくてもそのファイルを開いて
閉じた日時を表示させたいのです。
 

回答
投稿日時: 19/05/29 09:29:10
投稿者: WinArrow
投稿者のウェブサイトに移動

最終更新日時ではなく、参照(開いただけ)日時を取得するには、
WORDファイルでもExcelファイルでも、
参照日時は、アプリケーションが管理するファイルのプロパティには、情報が存在しません。
そのために、ファイルの中に参照日時を書き込みするのは、
本来のデータ更新と、参照するための日時記録との区別ができなくなり、
本末転倒になってしまいます。
 
当該ファイルを開く前ならば、エクスプローラのファイルのプロパティの中に
「アクセス日時」という項目があります。
 
これを参照して、表示すればよいと思います。
 
それには、
当該ファイルの中にそのマクロを組み込むのではなく、
他ブックにマクロを組み込み、そのマクロの中から当該ファイルを呼び出すように
すれば実現できるとおもいます。
ExcelファイルもWORDファイルも共通にするならば、VBSがよいかも
 
エクスプローラの「アクセス日時」取得するには
FSOを使います。
 
PCのレスポンスが悪くなってきたので、コードを紹介することができません。
 
FSO アクセス日時 VBA
で検索してみてください。
 
 

回答
投稿日時: 19/05/29 11:39:58
投稿者: hatena
投稿者のウェブサイトに移動

WinArrow さんの引用:
最終更新日時ではなく、参照(開いただけ)日時を取得するには、
WORDファイルでもExcelファイルでも、
参照日時は、アプリケーションが管理するファイルのプロパティには、情報が存在しません。
そのために、ファイルの中に参照日時を書き込みするのは、
本来のデータ更新と、参照するための日時記録との区別ができなくなり、
本末転倒になってしまいます。
 
当該ファイルを開く前ならば、エクスプローラのファイルのプロパティの中に
「アクセス日時」という項目があります。
 
これを参照して、表示すればよいと思います。

 
本来のデータ更新と、参照するための日時記録との区別」、これが問題なんですよね。
 
参照しただけの日時を文章中に表示させるには、文章を更新することになる。
なんらかの方法で「アクセス日時」を取得したとして、それを文章中に表示させると、更新したことになり、更新日時も更新されてします。
 
フィールドの IncludeText で外部ファイルとリンクさせればと試してみましたが、「フィールドの更新」を実行しないと更新されないし、それをすると、ファイルも更新されてしまう。
 
最終的には、文章内に表示させる場合は、最終更新日時と参照だけの日時を区別するのは不可能という結論になったのですが、なにかいい方法があるでしょうか。
 
ActiveWindow.Caption を使って、タイトルバーに表示させるぐらいで妥協するしかないのかな。
 
 
 

投稿日時: 19/05/29 13:44:12
投稿者: sara

hatenaさん WinArrowさん
 
多様なご意見ありがとう御座います
 
私はマクロ超初心者なので、お二人のコメントがドンドン専門的(?)になり
せっかく頂いたご意見をよく理解できず、申しわけありません。
 
私は単純に ファイルを開いた時に「このファイルを前回開いたのは何時か」が
分かればいいな〜と思い、以前このコーナーに質問した時に
最初のコードを教えて頂きエクセルでそれが出来たものですから
 (あくまでも、更新をしない時でも開いた日時です)
 
ワードでもできないかなと思い質問をさせて頂いた次第です。
 
私のエクセルファイルには   D1に更新日(表題)  F1 に閲覧日(表題)
               D2に日時       F2 に日時
 
閲覧日は投稿のコードでファイルを閉じた日時が
更新日には 実行ボタンを通り 更新した時はそのボタンをクリックで日時が変わります
 
このようにしていますので、単純にこれをワードでも出来ないかなと思った次第です。
 
せっかく頂いた貴重なご意見はコピペして、時間をかけて勉強をします。
本当にありがとう御座いました。
 
 

回答
投稿日時: 19/05/29 13:54:10
投稿者: WinArrow
投稿者のウェブサイトに移動

そもそもの話になりますが、
 
「最新のアクセス日時」を当該ファイルに表示させる
意図(=目的)はどこにあるのでしょう?
「当該ファイルを開いた」・・物理的に言えば、開けば、アクセス日時は、更新されます。
業務として考えると、
例えば、長い間、活用されていないファイルを削除(または、別の場所に移す)
などHDD内を整理するの足がかりが欲しい
というようなことではないのでしょうか?
と、すれば、当該ファイルを開いてしまうと、
永遠に活用されていることになります。
 
 

回答
投稿日時: 19/05/29 14:11:43
投稿者: sk

sara さんの引用:
ファイを開いて更新せず閉じた日時

sara さんの引用:
前回閉じた時点の日時を表示させたいのです
内容は更新せず見ただけの日にちなので上書き保存せずとも良いと思ていますが
上書き保存することでその時点での日時が表示されればよいです

sara さんの引用:
データの更新」がなくてもそのファイルを開いて
閉じた日時を表示させたいのです。

「ファイルの編集」と「ファイル(に対する編集内容)の保存」を
一緒くたにしたような表現を止めない限り、双方の認識や主張の
齟齬はなくならないと思います。
 
1. ファイルを開き、その内容の編集も上書き保存もせずに
   ファイルを閉じる。
 
2. ファイルを開き、その内容を編集し、ファイルを上書き保存して
   ファイルを閉じる。
 
3. ファイルを開き、その内容を編集し、ファイルを上書き保存せずに
   ファイルを閉じる。
 
4. ファイルを開き、その内容を編集せずに、ただファイルを上書き保存して
   ファイルを閉じる。
 
上記の 4 つの手順とそれぞれの結果の違いを明確に区別された上で
何をなさりたいのかを明示された方がよいでしょう。

投稿日時: 19/05/29 14:30:18
投稿者: sara

WinArrow さんの引用:
そもそもの話になりますが、
 
「最新のアクセス日時」を当該ファイルに表示させる
意図(=目的)はどこにあるのでしょう?
「当該ファイルを開いた」・・物理的に言えば、開けば、アクセス日時は、更新されます。
業務として考えると、
例えば、長い間、活用されていないファイルを削除(または、別の場所に移す)
などHDD内を整理するの足がかりが欲しい
というようなことではないのでしょうか?
と、すれば、当該ファイルを開いてしまうと、
永遠に活用されていることになります。
 

 
WinArrow さん
 
私は現在は現役を引退した身です。現役時代は洋菓子製造(パティシエ)でした。
パソコンを使いだしてから仕事上のルセット(レシピ)をパソコンに入力して
保存しておりました。最近知人からデザート等の手伝いを依頼され過去の資料を
引き出し分かりやすく入力し直しております。
 
そんな時に過去の資料を引き出して、更新せずに閉じた後
再度開いた時に、前回はいつ見たのだろうと思うことが時々あり、
それを表示できないだろうかと思いました。
(単純に記憶力の低下でしょうか(笑))
 
HDD内の整理も試行錯誤でほとんど使わないものは、使用頻度低 と言うフォルダを作り
そこへ移しています。
 
そのような理由で、更新をしなくても開いた日時が分かるようにしたいので
今回の様な質問をさせていただきました。

投稿日時: 19/05/29 14:50:42
投稿者: sara

sk さん ありがとう御座いました
 
おっしゃる通りですね
1〜4通り きちんと整理をしなくてはいけないのですね
 
勉強になります!  skさん ありがとう御座います。
 

回答
投稿日時: 19/05/29 15:56:20
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:

過去の資料を引き出して、更新せずに閉じた後
再度開いた時に、前回はいつ見たのだろうと思うことが時々あり、
それを表示できないだろうかと思いました。

 
この話はよく分かります。
 
ここで情報を整理すると
(1)最終更新日
(2)最終参照日
になると思いますが、
各々の情報を当該ファイルの保持すると考えると
本体情報:レシピ
付帯情報:(1)(2)
の両方が考えられます。
 
前回は、何時更新したか・・・・前回はいつ見たか・・・・は、
その対象は、本体情報ですか?付帯情報ですか?
要するに、本体情報を、更新、または、参照した日杖ならば、意味があるのですが、
付帯情報のみを見た/更新したことまで反映させてしまったら、
本末転倒になりませんか?
ということです。
 
1年間以上前に見たファイルがあったとして・・・・開くと、参照日付は1年前の日付が表示されますが、
その日付を見ただけで閉じた。
・・・さっき見たファイルを再度開くと、さっき見たときの日付になってしまいます。
日付だけみただけなのに・・・と思うかもしれませんが・・・・
 
 
このような管理が必要であるならば、別ファイルで行う方がよいと考えます。
(当該ファイルには付帯情報を保持しない)
 
 
 
 
 
 

回答
投稿日時: 19/05/29 16:05:04
投稿者: hatena
投稿者のウェブサイトに移動

sara さんの引用:
そんな時に過去の資料を引き出して、更新せずに閉じた後
再度開いた時に、前回はいつ見たのだろうと思うことが時々あり、
それを表示できないだろうかと思いました。

 
ファイルの更新日時は無視して、
単純に、
更新せずに閉じた場合の日時を記録しておきたい(閲覧日)
内容を更新して保存した日時を記録しておきたい(更新日)
ということなら、
DocumentBeforeClose、DocumentBeforeSave イベントを使えばなんとかなりそうということで、作成してみました。
やってみたら、思った以上に複雑なものになりました。
 
DocumentBeforeClose、DocumentBeforeSave イベントは、クラスモジュールを作成して、そこに記述する必要があります。
 
Application オブジェクトでイベントを使用する (Word) | Microsoft Docs
https://docs.microsoft.com/ja-jp/office/vba/word/concepts/objects-properties-methods/using-events-with-the-application-object-word
 
クラスモジュールを作成して、そこに下記のコードを記述します。
クラスモジュールの名前は、clsAppEvents としてください。
 
Option Explicit
Public WithEvents app As Word.Application
Public NoUpdate As Boolean
 
Private Sub app_DocumentBeforeClose _
        (ByVal Doc As Document, _
         Cancel As Boolean)
        
    '別ファイルの場合は何もしない
    If ThisDocument.FullName <> Doc.FullName Then Exit Sub
     
    '更新されて保存されていない場合は何もしない
    If Not .Saved Then Exit Sub

    With Doc
        With .Sections(1).Headers(1).Range
            '            .Paragraphs.Alignment = wdAlignParagraphRight
            .Paragraphs(2).Range.Text = Format(Now, "閲覧日 yyyy/mm/dd hh:nn:ss")
        End With
        NoUpdate = True
        .Save
        NoUpdate = False
    End With

End Sub

Private Sub app_DocumentBeforeSave _
        (ByVal Doc As Document, _
         SaveAsUI As Boolean, _
         Cancel As Boolean)
    
    If NoUpdate Then Exit Sub
    If ThisDocument.FullName <> Doc.FullName Then Exit Sub
    
    With ThisDocument
        With .Sections(1).Headers(1).Range
'            .Paragraphs.Alignment = wdAlignParagraphRight
            .Paragraphs(1).Range.Text = Format(Now, "更新日 yyyy/mm/dd hh:nn:ss") & vbCrLf
        End With
    End With
        
End Sub

 
ThisDocumentモジュールに下記のコードを記述します。
これで、ファイルを開いたときにクラスモジュールを初期化してます。
 
Option Explicit
Dim X As New clsAppEvents

Private Sub Document_Open()

    Set X.app = Word.Application

End Sub

 
ページヘッダーに、2行で、
更新日
閲覧日
と入力しておいてください。
 
これで、それなりに動作します。
ページヘッダーをユーザーが削除したりするとエラーになりますので、
その辺の対策は必要に応じて追加してください。
 

投稿日時: 19/05/29 17:01:56
投稿者: sara

WinArrowさん ご丁寧にありがとう御座います
 
最終更新日は ファイルを開いて内容を編集して上書き保存をして閉じた日時 
       (エクスプローラーに表示される日時で)
 
最終参照日は ファイルを開いて内容の編集はせず、上書き保存もしないでファイルを閉じた日時
       (エクスプローラーと異なる日時)
 
 
下記引用
1年間以上前に見たファイルがあったとして・・・・開くと、参照日付は1年前の日付が表示されますが、
その日付を見ただけで閉じた。
・・・さっき見たファイルを再度開くと、さっき見たときの日付になってしまいます。
日付だけみただけなのに・・・と思うかもしれませんが・・
                             以上引用
 
最終参照日はWinArrowさんがご指摘のように、見ただけなので最終参照日はさっきの日にちになて正解なのです。 このような古い資料を今様に直すときは名前を保存場所も変えております。
 
WinArrowさん 。 
何度も私の様な初心者に対応して頂き心から感謝をしております。
 
本当にありがとう御座いました。

投稿日時: 19/05/29 17:13:27
投稿者: sara

Hatenaさん 大変なお手数をおかけして恐縮です
 
回答をいただきやってみたのですが
知識不足のため、 今の日時が右端に表示されるだけでした
 
明日からの勉強課題が出来ました
 
私の様な初心者にこのようなコードまで作て頂き
感謝するのみです
 
本当に心から ありがとう御座います
 
取り急ぎ 御礼申し上げます
 

回答
投稿日時: 19/05/29 17:26:35
投稿者: hatena
投稿者のウェブサイトに移動

当方のサンプルでは正常に動作してますので、
私を回答どおりに設定すれば、うまくいくはずです。
 
下記の点を確認してださい。
 
1.
事前にページヘッダーに2行で、
 
更新日
閲覧日
 
と入力しておく。
 
2.
クラスモジュールの名前は、clsAppEvents になっているか。
このクラスモジュールのコードは、前回の私の回答のクラスモジュールのコードと同じになっているか。
 
3.
ThisDocumentモジュールのコードは、前回の回答のラスモジュールのコードと同じになっているか。
 
4.
コードを変更したときは、いったん保存して、再度開いてから、動作確認してください。
ファイルを開く時に初期化しているため、コードを変更すると、初期化がリセットされる場合があるので。
 
 
 

回答
投稿日時: 19/05/29 17:36:59
投稿者: hatena
投稿者のウェブサイトに移動

sara さんの引用:
最終更新日は ファイルを開いて内容を編集して上書き保存をして閉じた日時 
       (エクスプローラーに表示される日時で)
  
最終参照日は ファイルを開いて内容の編集はせず、上書き保存もしないでファイルを閉じた日時
       (エクスプローラーと異なる日時)

 
文章中に、最終参照日を表示させる限り、
最終更新日=エクスプローラーに表示される日時
とするのはマクロでは無理です。
 
文章中の最終参照日を変更して保存した時点で、エクスプローラーに表示される日時 も変更されてしまいますので。
 
エクスプローラーに表示される日時 は、ユーザーが上書き保存した日時、または、最終参照日を更新した日時
ということになります。
 
 
 

回答
投稿日時: 19/05/29 17:56:59
投稿者: sk

sara さんの引用:
最終更新日は ファイルを開いて内容を編集して上書き保存をして閉じた日時 
       (エクスプローラーに表示される日時で)
  
最終参照日は ファイルを開いて内容の編集はせず、上書き保存もしないでファイルを閉じた日時
       (エクスプローラーと異なる日時)

最初の投稿内容からしてそういうことだろうなと思いました。
 
引用:
Sub Auto_Close()
Range("A1").Value = Date & " " & Time
Application.DisplayAlerts = False
ActiveWorkbook.Save
Application.DisplayAlerts = True
End Sub

上記のマクロは
「そのブックを閉じようとした時に、その時点のシステム日時
(そのブックを閉じようとした日時)をアクティブシート
(この場合は通常、そのブック自身)の A1 セルに書き込み
(=ファイルの編集)、何の確認もなしにそのブックを
強制的に上書き保存する」という処理に当たります。
 
つまり、
 
sk さんの引用:
2. ファイルを開き、その内容を編集し、ファイルを上書き保存して
   ファイルを閉じる。

という操作が実行されているだけです。
( 1, 3, 4 のどれにも該当しないし、することが出来なくなる
 
そのマクロ自体が既に sara さんの目的に即していませんし、
それを Word のマクロに置き換えたところで同じことです。
 
sara さんの引用:
私は単純に ファイルを開いた時に「このファイルを前回開いたのは何時か」が
分かればいいな〜と思い、以前このコーナーに質問した時に
最初のコードを教えて頂きエクセルでそれが出来たものですから
 (あくまでも、更新をしない時でも開いた日時です)

もしかして、特定の Excel ブックや Word ドキュメントに限らず、
そのコンピューター上に存在するありとあらゆるファイルについての話を
されてます?

回答
投稿日時: 19/05/29 18:02:47
投稿者: WinArrow
投稿者のウェブサイトに移動

話をややこしくするつもりはないのですが、
 
私見ですが、
当該ファイルの中に「参照日」「更新日」を記録することには、問題があると思います。
このようなデータは、エクスプローラを見ればよいので、敢えて、手間をかけてまで、当がいいファイルに持ち込まなくてもよいと考えます。
 
一覧表で見たいのでしたら、フォルダを指定して
エクスプローラの日付関連情報を取得した別ファイルを作成したらいかがでしょう。
そうすればExcel,Wordを同じ表にすることができます。
当該ファイルには一切触らないので、日付が変わることはありません。
 
↓のサンプルコードが紹介されています。
https://www.moug.net/tech/exvba/0130015.html

回答
投稿日時: 19/05/29 18:23:24
投稿者: WinArrow
投稿者のウェブサイトに移動

サンプルコード提案
 
Option Explicit
 
Sub FSOSAMPLE()
Dim fso As Object
Dim fl As Object
Dim Sht As Worksheet, Rowx As Long
Dim f As Object
        Dim d As Date
 
Set fso = CreateObject("Scripting.FileSystemObject")
 
Set fl = fso.GetFolder("D:\TEST") ' フォルダを取得
Set Sht = Worksheets(1)
For Each f In fl.Files ' フォルダ内のファイルを取得
    If f.Name Like "*.xls?" Or f.Name Like "*.doc?" Then ' 日時を取得したいファイル
        Rowx = Sht.Range("A" & Sht.Rows.Count).End(xlUp).Offset(1).Row
        Sht.Cells(Rowx, "A").Value = f.Name
        d = f.DateCreated ' 作成日時を取得
        Sht.Cells(Rowx, "B").Value = d
        d = f.DateLastModified ' 更新日時を取得
        Sht.Cells(Rowx, "C").Value = d
        d = f.DateLastAccessed ' アクセス日時を取得
        Sht.Cells(Rowx, "D").Value = d
    End If
Next
' 後始末
 
Set fl = Nothing
Set fso = Nothing
 
End Sub

投稿日時: 19/05/30 13:55:05
投稿者: sara

Hatenaさん 
 
私は超初心者なのでなかなか理解できず申し訳ありません
クラスモジュールなるものも今回初めて知った次第です
それ故クラスモジュールの名前を何処で付けるのかもわからず
難儀している現状です。
 
せっかくいろいろアドバイスを頂いたのに
行かせず大変申し訳ありません。
 
今回はこれで終わりとさせてください。
 
本当にありがとう御座いました。

投稿日時: 19/05/30 14:00:24
投稿者: sara

skさん
 
いろいろ有難う御座いました
VBAの知識がほとんど無いような者の私が
投稿したのが間違えみたいな気がしてきました
皆さんにせっかく頂いたアドバイスを生かすことが出来ず
チョット 憔悴してます
 
この更新日 閲覧日を表示させたいのは
Excel・Wordのみ(この二つぐらいしか使っていません)です
 
お世話になりました
ありがとう御座いました。

投稿日時: 19/05/30 14:06:44
投稿者: sara

WinArrow さん
 
何度も本当にありがとう御座います
 
私はマクロ初心者でVBAの知識は殆ど無く
私の様な初心者がこのコーナーに質問を出したことが
間違えではなかったのかと反省しております
 
せっかく頂いたコードをどう使えばいいのかさえわからず
頂いたコメントに対しての応えさえきちんとできていないような気がしてき
お手間だけをおかけして大変申し訳ありません
 
これをもって終わりとさせてください。
 
本当にありがとう御座いました。

回答
投稿日時: 19/05/30 16:48:58
投稿者: WinArrow
投稿者のウェブサイトに移動

sara さんの引用:
WinArrow さん
 
何度も本当にありがとう御座います
 
私はマクロ初心者でVBAの知識は殆ど無く
私の様な初心者がこのコーナーに質問を出したことが
間違えではなかったのかと反省しております
 
せっかく頂いたコードをどう使えばいいのかさえわからず
頂いたコメントに対しての応えさえきちんとできていないような気がしてき
お手間だけをおかけして大変申し訳ありません
 
これをもって終わりとさせてください。
 
本当にありがとう御座いました。

 
回答者のアドバイスが理解できない
ことを質問したことが間違いなんて考えないで下さい。
貴方のスキルアップにきっと役に立っていると思います。
これからもどしどし質問してください。
 
分からないからといってあきらめないで「ください。
チャレンジすることで世界が広がってきます。
 
質問時に心がけていただきたいこと。
回答者は質問者さんが考えていることや、質問者さんのPCの画面は見えません。
言葉で説明するのは難しいかもしれませんが、
できるだけ、回答者に見えるように説明することと、
その目的を説明するよう心掛けていたきたいです。
目的が同じならば、別の手段が提示できるかもしれません。
 
今回のテーマもあきらめずに、頑張ってみませんか?
 
 

投稿日時: 19/05/31 06:33:31
投稿者: sara

WinArrow さん
 
おはよう御座います
 
暖かいお言葉ありがとう御座います
お言葉に甘えて今後も質問をさせていただきます
 
質問のしかたもおっしゃられるように
回答してくださる方々に、いかに分かった頂けるかをよく考えて質問をしますので
宜しくお願いします
 
今回のテーマは時間をかけて勉強するつもりでおりました
皆んにいただいた解決策を出来るように頑張ります
 
WinArrowさんにいただいた今回のメッセージを朝一番で
拝見してとても嬉しくなり、感謝します
 
ありがとう御座いました。

回答
投稿日時: 19/05/31 10:34:34
投稿者: simple

WinArrowさんが19/05/29 18:23:24に投稿してくださったコードを動かしてみました。
Excelファイルを開き、更新せずに閉じました。
しかし、参照時刻DateLastAccessedは
その参照した時刻になるかと思いきや、変わりませんね。
OS依存のようで、今回の目的に使えるのでしょうか。
ちなみに、私はWindows7ですが、どうなんでしょう。

回答
投稿日時: 19/05/31 11:43:49
投稿者: sk

simple さんの引用:
しかし、参照時刻DateLastAccessedは
その参照した時刻になるかと思いきや、変わりませんね。
OS依存のようで、今回の目的に使えるのでしょうか。
ちなみに、私はWindows7ですが、どうなんでしょう。

ファイルの最終アクセス日時を記録/更新するか否かは
どんなファイルシステムを採用しているかや
システムのレジストリ設定等によって決まりますが、
Windows Vista 以降の既定の設定では
最終アクセス日時の更新が無効化されています。
(実質的にはファイルの更新日時と同じ)
 
仮に有効にしたところで、ただファイルのプロパティ画面を
表示しただけで最終アクセス日時が更新されることも
あり得るのですから、今回の目的には則していないと言えます。
 
sara さんの引用:
この更新日 閲覧日を表示させたいのは
Excel・Wordのみ(この二つぐらいしか使っていません)です

特定の Excel ブックや Word ドキュメントに限定しての話なら、
「そのファイル自身に記録するのではなく、別のファイルに
アクセスログを記録するマクロを仕込む」という
解決策がベターだと思います。

回答
投稿日時: 19/05/31 12:07:12
投稿者: simple

skさん、コメントありがとうございました。
単なる閲覧ではアクセス日時は変わらない(Vista以降は)、ということがわかりました。
 
ちなみに、Excelファイルを他のフォルダにコピーすると、
更新日時は変わりませんが、最終アクセス日時は、コピーした時刻になるようですね。
でもユーザーが閲覧しても最終アクセス日時は変化がない。
アクセスということの定義が微妙なんですねえ。
 
質問者さん、余談を入れましてすみません。
# まったく無関係ではないでしょうけど。

回答
投稿日時: 19/05/31 13:01:38
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:
単なる閲覧ではアクセス日時は変わらない(Vista以降は)

 
そうですか・・・・
私は、WIndowsXP時代に確認したことがありましたが、
「アクセス日時」をあまり使うことがないので、気が付きませんでした。
 
別ファイルという提案がありましたが、
私が提案したFSOで作成したブックから当該ファイルを開き、
アクセスの結果で、日付を更新すればよいと思います。
 

投稿日時: 19/06/01 11:26:08
投稿者: sara

19/05/29/ 16:05:04 にHatenaさんから頂いたメッセージの
 
コードをやってみたのですが何度やっても出来ず
苦戦しています
 
19/05/29 17:26:36 に頂いたメッセージで
確認をしいるのですが
 
クラスモジュールにコードをコピペして
実行するにはどうすればよいのでしょうか
 
(Wordで行っています)
 
 

回答
投稿日時: 19/06/01 17:16:53
投稿者: mattuwan44

横槍すみません。
 
エクセルで出来るなら、レシピをエクセルにコピペしたらいかがでしょう?

回答
投稿日時: 19/06/01 19:15:23
投稿者: hatena
投稿者のウェブサイトに移動

もう一度手順を書いておきます。
 
 
1.
事前にページヘッダーに2行で、
  
更新日
閲覧日
  
と入力する。
 
2.
VBAウィンドウのメニューの[挿入]-[クラスモジュール]をクリックする。
開いたクラスモジュールに、
19/05/29/ 16:05:04 のクラスモジュールのコードをコピーして貼り付ける。
クラスモジュールの名前を、clsAppEvents にする。
名前は、プロパティの「オブジェクト名」で設定できます。
 
3.
ThisDocumentモジュールを開いて、そこに
19/05/29/ 16:05:04 のThisDocumentモジュールのコードをコピーして貼り付ける。
 
※ここに記述した Document_Open はワードファイルを開いたとに自動で実行されます。
そこで、クラスモジュールを初期化してますので、以降は、
イベントに応じて、クラスモジュールは自動で実行されます。
 
4.
メニューの[デバッグ]-[****のコンパイル] をクリックする。
エラーが表示されなければOKです。
エラーで出たらどこでエラーがでたか教えてください。
 
ファイルを上書き保存して、閉じてください。
 
5.
ファイルを開いて、何もせずに閉じてください。
次に、開いてみて、ヘッダーの閲覧日の日時が更新されているか確認してください。
 
6.
次に、ファイルの内容を編集してください。
上書き保存ボタンを押してください。
ヘッダーの更新日の日時が更新されるのを確認ください。
 
以上です。

回答
投稿日時: 19/06/01 19:35:54
投稿者: hatena
投稿者のウェブサイトに移動

厳密にいえば、他の方も提案されている、別ファイルに閲覧、更新ログを記録しておくというのが、ベストだと思います。
 
そうするにしても、Wordの 閉じる前、保存前のイベントを使えるようになることが必要になります。
Wordの上記のイベントは、ExcelやAccessなどと違って、クラスモジュールに記述する必要がなるという難易度の高いものです(私も、今回、初めて知りました。)
 
まずは、私のコードが動作するようにすることが先決ですね。
 
それが、できて、それで機能的に不足するなら、別ファイルにログを記録するというように修正すればいいでしょう。
 
最初の質問のエクセルのコードで、質問者さんが不満がないのなら、私のコードでも十分だとは思います。

回答
投稿日時: 19/06/01 20:36:58
投稿者: WinArrow
投稿者のウェブサイトに移動

別ファイルで運用するコードを紹介します。
 
新しいブックを開き
Sheet1にファイル名リストのための設定します。
 
任意のセル(B1)に「パス」という名前を定義して、
対象のパス(フォルダ名:例、D:\TEST)を入力します。
意味:D:\TESTフォルダ内のExcel、Wordファイルのフォルダです。
 
↓は項目名です。
セルB3:ファイル名
セルC3:作成日時
セルD3:更新日時
セルE3:参照日時
 
↓マクロ
 
【標準モジュール】
Option Explicit
 
Public Sub GetFileDate()
Dim パス As String
Dim fso As Object
Dim fl As Object
Dim Sht As Worksheet, Rowx As Long
Dim f As Object
Dim d As Date
   
    パス = ThisWorkbook.Names("パス").RefersToRange.Value
    Set fso = CreateObject("Scripting.FileSystemObject")
   
    Set fl = fso.GetFolder(パス) ' フォルダを取得
    Set Sht = Worksheets("Sheet1")
    
    For Each f In fl.Files ' フォルダ内のファイルを取得
        If (f.Name Like "*.xls?" Or f.Name Like "*.doc?") Then ' 日時を取得したいファイル
            If Not f.Name Like "*$*" Then
                If WorksheetFunction.CountIf(Sht.Columns("B"), f.Name) > 0 Then
                    Rowx = WorksheetFunction.Match(f.Name, Sht.Columns("B"), 0)
                Else
                    Rowx = Sht.Range("B" & Sht.Rows.Count).End(xlUp).Offset(1).Row
                End If
                Sht.Cells(Rowx, "B").Value = f.Name
                d = f.DateCreated ' 作成日時を取得
                Sht.Cells(Rowx, "C").Value = d
                d = f.DateLastModified ' 更新日時を取得
                Sht.Cells(Rowx, "D").Value = d
            End If
        End If
    Next
    Sht.Range("B3").CurrentRegion.Sort key1:=Range("B3"), order1:=xlAscending, Header:=xlYes
     
 ' 後始末
  
    Set fl = Nothing
    Set fso = Nothing
End Sub
 
Public Sub FileOPEN()
Dim 行 As Long
Dim wbk As Workbook
Dim wdAPP As Object, wdDOC As Object
Dim パス As String
 
    With Sheets("Sheet1")
        パス = ThisWorkbook.Names("パス").RefersToRange.Value
        行 = Selection.Row
        Select Case True
            Case .Cells(行, "B").Value Like "*.xls?"
                Set wbk = Workbooks.Open(Filename:=パス & "\" & .Cells(行, "B").Value)
                .Cells(行, "E").Value = Format(Now(), "yyyy/mm/dd hh:mm")
            Case .Cells(行, "B").Value Like "*.doc?"
                Set wdAPP = CreateObject("Word.Application")
                wdAPP.Visible = True
                AppActivate wdAPP.Caption
                Set wdDOC = wdAPP.documents.Open(Filename:=パス & "\" & .Cells(行, "B").Value)
        End Select
    End With
 
End Sub
 
 
【Thisworkbookモジュール】
Private Sub Workbook_Open()
    Call GetFileDate
End Sub
 
シート
1行目のボタンを配置し、マクロの登録(Fマクロ名:ileOPEN)します。
 
ブックに名前つけて保存してください。
 
機能
(1)このブックが開いて時に
対象フォルダ内のExcel,WOrdファイルのrストを作成します。
既にリストがある場合は、作成日時、更新日時が最新に置き換わります。
 
(2)ボタンに登録したマクロで、ファイルを開きます。
開く対象のファイル名のセルにカーソルを置いてから、ボタンをクリックします。
その時、参照日時を更新します。
開かれたファイルが上書き保存されてもリストの更新日時は更新されません。
次回、このマクロファイルが開かれたとき自動更新されます。
 
ためしてみてください。
 
 
 
 
 
 

回答
投稿日時: 19/06/01 20:45:19
投稿者: WinArrow
投稿者のウェブサイトに移動

コードにぬけがありました。
 
End Select
の前に

                .Cells(行, "E").Value = Format(Now(), "yyyy/mm/dd hh:mm") 
挿入してください。

投稿日時: 19/06/02 06:32:00
投稿者: sara

hatenaさん おはよう御座います
何でもお手数をお掛けして申し訳ありません
 
コンバイルをクリックするとエラーが出ました
 
エラーメッセージは
参照が不正又は不完全です
 
コードの
 
    '更新されて保存されていない場合は何もしない
    If Not .Saved Then Exit Sub
 
 Saved の背景が青くなっています。

投稿日時: 19/06/02 07:25:30
投稿者: sara

WinArrow さん おはよう御座います
 
宜しくお願いします
 
別ファイルで運用するコードの件で
>任意のセル(B1)にバスと言う名前を定義して
 これは B1に バスと入力すればよいのでしょうか
 
>対象のパス(フォルダ名:例、D:\TEST)を入力します。
 これは B2 にフォルダ名を入力でよろしいのでしょうか
 
コードの終わりの下に有る 
 
シート
>1行目のボタンを配置し、マクロの登録(Fマクロ名:ileOPEN)します。
 ボタンを配置するとはどいう事かよく分かりません
実行ボタンを作ると言うことなのでしょうか?
 
上記のように入力してやってみました
マクロを実行してみると
エラーメッセージが
 参照が不正又は不完全です と出ます
 
追加で頂いたコード
.Cells(行, "E").Value = Format(Now(), "yyyy/mm/dd hh:mm")
の Cells の背景がブルーに
そして
 
 ' 後始末
   
    Set fl = Nothing
    Set fso = Nothing
End Sub
  
Public Sub FileOPEN()
Dim 行 As Long
Dim wbk As Workbook
Dim wdAPP As Object, wdDOC As Object
Dim パス As String
 上記コードの
 
Public Sub FileOPEN() のコードが黄色になっています
 
宜しくお願いします

回答
投稿日時: 19/06/02 08:43:37
投稿者: WinArrow
投稿者のウェブサイトに移動

(1)セルに名前をつける方法
セルにはアドレスを名前とする「名前」が付いています。
 
たとえば、セルB1(アドレス)のカーソルを置くと
「名前ボックス」に「B1」と表示されます。
そのセルに別の名前を付けることができます。
名前ボックスに「パス」と入力すると、セルB1に別名が定義されたことになります。
名前ボックスでつけた名前は、ブック内でユニークとなります。
つまり、他セルに同じ名前を定義できないということです。
 
なお、セルB1(アドレス)を別のセルに移動(コピペではない)すると、名前も一緒に移動されます。
元のセルの場所を変更することができます。
 
マクロでセルを固定的に記述すると、セルの場所変更に伴いコードを変更する必要が出てきます。
 

Range("B1").Value ×・・・・コードの修正要
Range("パス").Value ○・・・コードの修正不要
 
(2)シートにボタン配置について
マクロとは、VBAコードで記述した一連の処理の記述を言いますが、
記述したコードを実行するには、コードをプロシジャン中に記述して、
プロシジャ名を実行させるための仕組みが必要です。
今回、ボタンを提案しましたが、
ボタンにマクロ名(プロシジャ名)を登録することで
ボタンをクリックすることで、プロシジャを実行させることができます。
 
マクロ(プロシジャ)を実行させるには、
いくつかの方法が用意されていますが、
どの方法を使うかは、システム設計者(あなた)が考えることです。
 
最初の質問時に書いてあった「Sub Auto_Close()」は、
Excel95時代から存在するイベントプロシジャです。
イベントプロシジャとは、ある事象(イベント)発生時に実行させる
プロシジャです。
「Sub Auto_Close()」は、「当該ブックを閉じる」というイベントで実行されます。
 
今回は、ファイル名リストの中から開きたいファイルを指定するので
イベントプロシジャより、目視できるボタンを提案しました。
 
セルをダブルクリックしたとき実行するというような、イベントも使えます。
 
 
なおボタンは、図形(オートシェイプ)でも構いません。
目視できる文字列を入力してください。
 
(3)マクロの登録方法
ボタンを右クリックして表示されるメニューの中の「マクロの登録」を使います。
表示されるダイアログで、プロシジャ名を選択すると登録されます。
 
ここまで理解したら、実施してみてください。

回答
投稿日時: 19/06/02 09:28:57
投稿者: hatena
投稿者のウェブサイトに移動

sara さんの引用:
コードの
 
    '更新されて保存されていない場合は何もしない
    If Not .Saved Then Exit Sub

あっ、私の回答のコードが間違ってましたね。
下記に修正してください。
 
    '更新されて保存されていない場合は何もしない
    If Not Doc.Saved Then Exit Sub

投稿日時: 19/06/02 12:48:28
投稿者: sara

Hatenaさん 
 
出来ました、感激で嬉しいです
 
ありがとう御座います。
 
このやり方をwordに整理して
ファイル名を Hatena にして保存します。
 
ありがとう御座いました。
 
 
 

投稿日時: 19/06/02 13:34:47
投稿者: sara

mattuwan44 さんの引用:
横槍すみません。
 
エクセルで出来るなら、レシピをエクセルにコピペしたらいかがでしょう?

 
mattuwan44さん
 
ワードのレシピは、マニュアルが着いていますので
ワードで作っています。
 
エクセルにワードを張り付けたりしてみたのですが
後から修正した手を加えるときに問題が出て
現在はエクセルは数字的な事のみ(含む原価計算)
わーでには細かいマニュアル付きとしています。
 
Hatenaさんの方法で出来ました。

回答
投稿日時: 19/06/02 14:49:52
投稿者: hatena
投稿者のウェブサイトに移動

分かっていると思いますが、
私の方法は、
エクスプローラーに表示される更新日時は、
最終閲覧日時になります。
文章中に表示される、
最終更新日とはことなりますので、
その点は留意しておいてください。

投稿日時: 19/06/02 15:17:12
投稿者: sara

Hatenaさん
 
ご丁寧に ありがとう御座います。

投稿日時: 19/06/02 15:38:34
投稿者: sara

WinArrow さん
 
苦戦中です
 
頂いたメッセージのようにやっているつもりなのですが
ボタンでマクロを実行しても 何も変わらず
 
また時間をおいてやってみます。

回答
投稿日時: 19/06/02 16:29:06
投稿者: WinArrow
投稿者のウェブサイトに移動

>頂いたメッセージのようにやっているつもりなのですが
>ボタンでマクロを実行しても 何も変わらず
 
(1)パスには、どのような文字列を入力しているのですか?
  D:\TESTは、例なので、実際のフォルダパスを指定してください。
(2)ファイル名のリストは作成できているのですか?
 
(3)ファイル名のリストが作成できていると仮定して
  ファイル名のセルにカーソルを置いてから、ボタンをクリックしていますか?

投稿日時: 19/06/03 06:54:29
投稿者: sara

winArrowさん おはよう御座います
 
今朝Excelを開いたらリストが表示されました
びっくりしたり感激したりです
 
ファイル名・作成日・更新日
閲覧日には日時は表示されません
 
試しにバスに入力しているフォルダ内のファイルと開いて更新して閉じ
また更新しないで閉じると両方やってみました
閉じた時点では日付は変わりませんが
リストを閉じて、再び開くと更新日時は変わりますが
閲覧日は表示されません
 
ファイル名にカーソルを持っていってクッリクしても
何の変化も出ません
ただマウスポイントが普段は矢印なのに
□の十字 に代わります。
 
また何度か試してみます
 
WinArrowさん 何度も何度もお手数をおかけして
本当にありがとう御座います。

回答
投稿日時: 19/06/03 08:41:09
投稿者: WinArrow
投稿者のウェブサイトに移動

大変申し訳ありません。
回答した文章にミスがありました。
 
誤)
1行目のボタンを配置し、マクロの登録(Fマクロ名:ileOPEN)します。
 
正)
1行目のボタンを配置し、マクロの登録(マクロ名:FileOPEN)します。
 
登録したマクロ名を修正してみてください。
 
なお、ボタンをクリックすると、カーソルが置かれているセルに記入されているファイルが開きます。
 
開いたファイルを閉じると
「参照日時」が入力されます。
但し、閉じた日時ではなく、開いた日時です。
 
 

回答
投稿日時: 19/06/03 11:22:18
投稿者: sk

hatena さんの引用:
厳密にいえば、他の方も提案されている、別ファイルに閲覧、更新ログを記録しておくというのが、ベストだと思います。
  
そうするにしても、Wordの 閉じる前、保存前のイベントを使えるようになることが必要になります。
Wordの上記のイベントは、ExcelやAccessなどと違って、クラスモジュールに記述する必要がなるという難易度の高いものです(私も、今回、初めて知りました。)

クラスモジュールを作らなくても一応は可能。
 
( Word の ThisDocument モジュール)
----------------------------------------------------------
Option Explicit
 
'アクセスログを記録する場合は True、記録しない場合は False に
Private Const IsLogging As Boolean = True
 
Private WithEvents MyApp As Word.Application
 
Private Sub Document_Open()
     
    Set MyApp = Application
 
    If IsLogging = False Then
        Exit Sub
    End If
     
    Dim strLogText As String
     
    strLogText = "ユーザー'" & Environ("USERNAME") & "'が'" & Me.FullName & "'を開きました。"
     
    Call subAddAccessLog(strLogText)
     
End Sub
 
Private Sub MyApp_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
 
    If IsLogging = False Then
        Exit Sub
    End If
 
    Dim strLogText As String
     
    If Doc.FullName = Me.FullName Then
        strLogText = "ユーザー'" & Environ("USERNAME") & "'が'" & Doc.FullName & "'を保存しました。"
        Call subAddAccessLog(strLogText)
    End If
 
End Sub
 
Private Sub Document_Close()
         
    If IsLogging = False Then
        Set MyApp = Nothing
        Exit Sub
    End If
 
    Dim strLogText As String
     
    strLogText = "ユーザー'" & Environ("USERNAME") & "'が'" & Me.FullName & "'を閉じました。"
     
    Call subAddAccessLog(strLogText)
         
    Set MyApp = Nothing
 
End Sub
 
'このドキュメントと同じフォルダにログファイルを記録するサブルーチン
Private Sub subAddAccessLog(ByVal LogText As String)
On Error GoTo Err_subAddAccessLog
 
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
 
    Dim objFSO As Object 'FileSystemObject
    Dim objTS As Object 'TextStream
     
    Dim strFolderPath As String
    Dim strLogFilePath As String
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    strFolderPath = Me.Path
     
    strLogFilePath = strFolderPath & "\" & _
                     "アクセスログ.txt"
     
    If objFSO.FileExists(strLogFilePath) Then
        Set objTS = objFSO.OpenTextFile(strLogFilePath, ForAppending, TristateUseDefault)
    Else
        Set objTS = objFSO.CreateTextFile(strLogFilePath, True)
    End If
     
    objTS.WriteLine "記録日時: " & Format(Now(), "yyyy/mm/dd hh:nn:ss")
    objTS.WriteLine LogText & vbCrLf
 
Exit_subAddAccessLog:
On Error Resume Next
 
    objTS.Close
    Set objTS = Nothing
    Set objFSO = Nothing
 
    Exit Sub
 
Err_subAddAccessLog:
     
    MsgBox "アクセスログの記録中に、以下の実行時エラーが発生しました。" & vbCrLf & _
           Err.Number & ": " & Err.Description, _
           vbCritical, _
           "実行時エラー (subAddAccessLog)"
     
    Resume Exit_subAddAccessLog
End Sub
----------------------------------------------------------

回答
投稿日時: 19/06/03 11:48:04
投稿者: hatena
投稿者のウェブサイトに移動

sk さんの引用:
クラスモジュールを作らなくても一応は可能。

 
あっ、そうか。
ThisDocument モジュールに
Private WithEvents MyApp As Word.Application 

を記述すればいいのか。
ThisDocument もクラスですもんね。
 
 

投稿日時: 19/06/03 13:52:03
投稿者: sara

WinArrow さん
 
訂正の件は大丈夫です
たぶんそうではないかと思い 正 のマクロ名で登録しました
 
コメント通りにカーソルを置いてボタンをクリックすると
カーソルの置いてあるファイルが開きました
 
参照日時(閲覧日時)もファイルを開くと
表示されます。
 
WinArrowさん
今回は本当にありがとう御座いました
 
途中ギブアップしましたが、WinArrowさんのお言葉に
勇気づけされ、
Hatenaさんからの提案も出来ましたし
そして今 WinArrow さんかrの提案も出来ました
(出来たと言ってもご指示のままにやってだけですが(笑))
 
本当にありがとう御座いました。
 
 
 

回答
投稿日時: 19/06/03 14:28:54
投稿者: WinArrow
投稿者のウェブサイトに移動

>そして今 WinArrow さんかrの提案も出来ました
>(出来たと言ってもご指示のままにやってだけですが(笑))
 
そうですか・・よかったです。
 
ところで、
当該ブックや文書のClose時に 日付を書き込むマクロ(冒頭のマクロも)は、
当該ファイルの「更新がなくても」という意図とは関係なく、「更新」したことになります。
人手で「更新=上書き保存」すると、2回上書き保存sたことになります。
 
そのあたりを充分理解して運用してください。
 
それから、
貰ったコードで動いた・・・で完了とせず、
1行ごとにコードの意味や意図を理解する努力をしてください。
メンテナンス(機能追加)はあなたが実施するということを肝に肝に銘じて・・・・
 
 

投稿日時: 19/06/03 16:35:56
投稿者: sara

WinArrowさん
 
はい! そのつもりでおります
 
せっかく皆さんに時間をかけてして提案して頂いた
大事なメッセージですから
 
勉強させていただきます
 
ありがとう御座いました。

投稿日時: 19/06/04 06:26:40
投稿者: sara

 
今回の質問ではたくさんの方から
色々なコメントを頂きありがとう御座いました。
 
頂いたコメントを今後読み直し
勉強をしたいと思っております
 
コメントを下さった方々には
心より感謝しております
 
改めてありがとう御座いました。