Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6656 / 13646 ツリー ←次へ | 前へ→

【43944】Excelで使用したファイルを監視する方法は? 初心者 06/10/30(月) 15:00 質問[未読]
【43946】Re:Excelで使用したファイルを監視する方法... Statis 06/10/30(月) 16:13 質問[未読]
【43964】Re:Excelで使用したファイルを監視する方法... 初心者 06/10/31(火) 12:02 回答[未読]
【43947】Re:Excelで使用したファイルを監視する方法... りん 06/10/30(月) 18:06 回答[未読]
【43951】Re:Excelで使用したファイルを監視する方法... 朝顔 06/10/30(月) 21:49 質問[未読]
【43955】Re:Excelで使用したファイルを監視する方法... りん 06/10/30(月) 22:39 発言[未読]
【43957】Re 教えて君ですいません 朝顔 06/10/30(月) 23:13 質問[未読]
【43958】Re:Re 教えて君ですいません りん 06/10/31(火) 7:09 回答[未読]
【43959】ログ取りアドインにしてみました(脱線中) りん 06/10/31(火) 9:27 回答[未読]
【43960】Re:ログ取りアドインにしてみました(脱線... りん@通りすがり 06/10/31(火) 10:49 発言[未読]
【43977】Re 教えて君ですいません2 朝顔 06/10/31(火) 15:48 質問[未読]
【43978】Re:Re 教えて君ですいません2 Kein 06/10/31(火) 16:05 発言[未読]
【43979】Re:Re 教えて君ですいません2 朝顔 06/10/31(火) 16:32 お礼[未読]
【43980】Re:Re 教えて君ですいません2 りん 06/10/31(火) 17:55 発言[未読]
【43998】Re:Re 教えて君ですいません2 朝顔 06/10/31(火) 20:53 発言[未読]
【43999】Re:Re 教えて君ですいません2 りん 06/10/31(火) 20:57 発言[未読]
【44000】Re:Re 教えて君ですいません2 朝顔 06/10/31(火) 21:18 お礼[未読]
【44001】Re:Re 教えて君ですいません2 りん 06/10/31(火) 21:47 回答[未読]
【44003】Re:Re 教えて君ですいません2 朝顔 06/10/31(火) 22:29 お礼[未読]
【43971】Re:Excelで使用したファイルを監視する方法... 初心者 06/10/31(火) 13:02 お礼[未読]

【43944】Excelで使用したファイルを監視する方法...
質問  初心者  - 06/10/30(月) 15:00 -

引用なし
パスワード
   はじめまして。
ここで伺う質問ではないかも知れませんが、当方Excelに詳しく
無いもので、ご指導を賜りたいと思います。

さて、今回教えて頂きたい事は、Excelで過去に開いたファイルの
履歴をログとして残す方法です。
“ファイル→開く→履歴”の順で確認する方法は分かっているので
すが、共有で使用しているPCを不正に使用されているようなので・・・

ご存知の方ございましたらご指導ください。

【43946】Re:Excelで使用したファイルを監視する方...
質問  Statis  - 06/10/30(月) 16:13 -

引用なし
パスワード
   こんにちは
>共有で使用しているPCを不正に使用されているようなので
PCの監視ですか?それとも特定のExcelファイルですか?

【43947】Re:Excelで使用したファイルを監視する方...
回答  りん E-MAIL  - 06/10/30(月) 18:06 -

引用なし
パスワード
   初心者 さん、こんばんわ。

>ここで伺う質問ではないかも知れませんが、当方Excelに詳しく
>無いもので、ご指導を賜りたいと思います。
エクセルの起動(単一PC)の記録を取るならこんな感じです。

詳しくない人に紹介するのもアレな内容になってしまいますが。
1. ↓以下をThisworkbookに記述します。

Option Explicit
Private WithEvents app As Application
'シート(ログ)に転記
Private Sub app_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
  If Wb.Name <> ThisWorkbook.Name Then
   Log_Edit Wb.FullName, "Close" '実働部分は別Sub
  End If
End Sub
'シート(ログ)に転記
Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
  If Wb.Name <> ThisWorkbook.Name Then
   Log_Edit Wb.FullName, "Open" '実働部分は別Sub
  End If
End Sub
'Open_Close共通処理
Private Sub Log_Edit(arg1 As String, arg2 As String)
  'arg1:フルパスファイル名 arg2:処理状況
  Dim r1 As Range
  With Application.ThisWorkbook.Worksheets(1)
   Set r1 = .Range("A65536").End(xlUp).Offset(1, 0)
   If r1.Row = 10002 Then
     LogDataFile '10000件で強制ログクリア
     Set r1 = .Range("A2")
   End If
   r1.Value = arg1
   r1.Offset(0, 1).Value = Now
   r1.Offset(0, 2).Value = arg2
  End With
End Sub
'かならず上書き(念のためウィンドウは非表示)
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  With ThisWorkbook
   .Windows(1).Visible = False
   .Save
  End With
End Sub
'ブックオープン時のイベント
Private Sub Workbook_Open()
  Set app = Application
  With Application.Workbooks
   If .Count = 1 Then .Add
  End With
End Sub
'ログを表示したいときに、手動で実行してください。
'カレントフォルダ(ツール→オプション→全般)に保存されます。
Private Sub LogDataFile()
  Dim II As Long, Imax As Long, ofile As String
  With Application
   'フルパスファイル名
   ofile = .DefaultFilePath & .PathSeparator & Format(Now(), "eemmddhhmm") & ".csv"
  End With
  With ThisWorkbook.Worksheets(1)
   Imax = .Range("A65536").End(xlUp).Row
   'ログ出力
   Open ofile For Output As #2
     For II = 2 To Imax
      Print #2, .Cells(II, 1).Value; ","; .Cells(II, 2).Value; ","; .Cells(II, 3).Value
     Next
   Close #2
   'ログクリア
   .Columns("A:C").ClearContents
  End With
End Sub


2. VBAProjectをパスワードでロックします。
3. 適当に名前をつけて保存し、エクセルを終了します。
4. XLStartフォルダにこのブックを入れると、起動時に読み込まれます。
ブックを開いたり閉じたりする度にログが記録されます。

ログクリアは1万件に1回ファイルを出力するようにしていますが、必要に応じてVBAProjectのパスを解除してコードを表示し、LogDataFileを実行してください。
なお、ログファイルはカレントフォルダにcsv形式で出力されます。

意味が違ってたらごめんなさい。

【43951】Re:Excelで使用したファイルを監視する方...
質問  朝顔  - 06/10/30(月) 21:49 -

引用なし
パスワード
   りんさん、こんにちは。一つご教授お願いします。
私もファイル管理に興味がありりんさんのコードを試してみました。

>2. VBAProjectをパスワードでロックします。
>3. 適当に名前をつけて保存し、エクセルを終了します。
>4. XLStartフォルダにこのブックを入れると、起動時に読み込まれます。

そこでわからないことが色々出てきました。
4の起動時に読み込まれるというのは、マクロが読み込まれると思いましたが
ブックが開くという意味でしょうか。
実際にログ管理.xlsという名前で4まで進みましたが、他のファイルを開くときに
必ずBOOK1.xlsが一緒に開いてしまいます。
試しに先にログ管理.xlsというファイルを作り、1のコードを乗せてみると
このファイルを開こうとするとBOOK1の名前で開いてしまいます。
私が何か勘違いしてますでしょうか。なにかアドバイスいただければ幸いです。

【43955】Re:Excelで使用したファイルを監視する方...
発言  りん E-MAIL  - 06/10/30(月) 22:39 -

引用なし
パスワード
   朝顔 さん、こんばんわ。

>>4. XLStartフォルダにこのブックを入れると、起動時に読み込まれます。
>そこでわからないことが色々出てきました。
>4の起動時に読み込まれるというのは、マクロが読み込まれると思いましたが
>ブックが開くという意味でしょうか。
XLStartフォルダに入れておくと起動時に無条件に読み込まれるので、VBEのプロジェクトエクスプローラーで見ると、ブックが読み込まれているはずです。
ちゃんと読み込まれていれば、ウィンドウ−再表示−「ブック名」で表示することもできます。

>試しに先にログ管理.xlsというファイルを作り、1のコードを乗せてみると
>このファイルを開こうとするとBOOK1の名前で開いてしまいます。
このブックは非表示ウィンドウなので、読み込んでも表示されません。
(BeforeCloseで非表示に設定してあります)

【43957】Re 教えて君ですいません
質問  朝顔  - 06/10/30(月) 23:13 -

引用なし
パスワード
   りんさんレスありがとうございます。
再度トライしましたが、4の操作後ですと、どのエクセルファイルを
開くときもBook1が一緒に開いてしまいますが、これはそういう仕組みなのか
私の操作などの問題なのか教えていただけないでしょうか。

それと
>ログファイルはカレントフォルダにcsv形式で出力されます。
という点ですが、これは開いたファイルと同じディレクトリに
CSV形式のログファイルができるという意味でしょうか。
それらしいものが見あたらないのですが、それ以前に躓いているのか文章の
解釈が間違っているのかもわからないのでアドバイスお願いします。

【43958】Re:Re 教えて君ですいません
回答  りん E-MAIL  - 06/10/31(火) 7:09 -

引用なし
パスワード
   朝顔 さん、おはようございます。

>再度トライしましたが、4の操作後ですと、どのエクセルファイルを
>開くときもBook1が一緒に開いてしまいますが、これはそういう仕組みなのか
>私の操作などの問題なのか教えていただけないでしょうか。
ブックオープン時のイベントでブックを追加していますので、マクロ側の設定です。
Private Sub Workbook_Open()
  Set app = Application
  'ここで新規ブック追加(Book1)
  With Application.Workbooks
   If .Count = 1 Then .Add
  End With
End Sub

>>ログファイルはカレントフォルダにcsv形式で出力されます。
>という点ですが、これは開いたファイルと同じディレクトリに
>CSV形式のログファイルができるという意味でしょうか。
エクセルのメニューバーで、ツール→オプション→全般タブに、カレントフォルダ名の確認ができる部分があります。
エクセルを起動したときに、「開く」で最初に読みに行くフォルダです。
大体の場合はMy Documentsです。

マクロのこの部分で指定しています。
  With Application
   'フルパスファイル名
   ofile = .DefaultFilePath & .PathSeparator & Format(Now(), "eemmddhhmm") & ".csv"
  End With

アドインにして、ログはシートに保存せずに直接テキストに出力するほうがいいかもしれないと、後で思いました。

【43959】ログ取りアドインにしてみました(脱線中...
回答  りん E-MAIL  - 06/10/31(火) 9:27 -

引用なし
パスワード
   おはようございます。

以下を全てThisWorkbookに記述し、一旦保存後、アドインを作成(名前をつけて保存・形式をxlaにする)。
ブックを保存する前に、VBAProjectに保護をかけておいた方がいいと思います。

'ここから=================================
Option Explicit
Private WithEvents app As Application
Dim opath As String
'シート(ログ)に転記
Private Sub app_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
  If Wb.Name <> ThisWorkbook.Name Then
   Log_Edit Wb.FullName, "Close" '実働部分は別Sub
  End If
End Sub
'シート(ログ)に転記
Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
  If Wb.Name <> ThisWorkbook.Name Then
   Log_Edit Wb.FullName, "Open" '実働部分は別Sub
  End If
End Sub
'Open_Close共通処理
Private Sub Log_Edit(arg1 As String, arg2 As String)
  'arg1:フルパスブック名 arg2:処理状況
  If opath = "" Then opath = TempPATH
  'ファイル名固定
  Open opath & "\Excel_OC.LOG" For Append As #2
   Print #2, arg1; vbTab; Now; vbTab; arg2
  Close #2
End Sub
'オープン時のイベント
Private Sub Workbook_Open()
  With Application.Workbooks
   If .Count = 0 Then .Add
  End With
  '
  Set app = Application
End Sub
'TEMPフォルダを取得する関数
Private Function TempPATH()
  Dim obj1 As Object
  Set obj1 = CreateObject("Scripting.FileSystemObject")
  TempPATH = obj1.GetSpecialFolder(2).Path
End Function
'ここまで=================================

ツール→アドインで作成したアドインを組み込めば、起動時に読み込まれ、ブックが開く/閉じるたびに、WindowsのTempフォルダにログが追加されます。
ファイル名は、Excel_OC.LOG です。

Tempフォルダとは、
Windows98の場合は、
  C:\Windows\Temp
2000以降の場合は、
  C:\Documents and Settings\(ユーザー名)\Local Settings\Temp

ユーザーに管理者権限がないとどうなるかは今は試せないので、どなたかお願いします。
LocalSettingなので大丈夫とは思います。

【43960】Re:ログ取りアドインにしてみました(脱...
発言  りん@通りすがり  - 06/10/31(火) 10:49 -

引用なし
パスワード
   >ツール→アドインで作成したアドインを組み込めば、起動時に読み込まれ、ブックが開く/閉じるたびに、WindowsのTempフォルダにログが追加されます。
>ファイル名は、Excel_OC.LOG です。
>
>Tempフォルダとは、
>Windows98の場合は、
>  C:\Windows\Temp
>2000以降の場合は、
>  C:\Documents and Settings\(ユーザー名)\Local Settings\Temp

>ユーザーに管理者権限がないとどうなるかは今は試せないので、どなたかお願いします。
 WinXPで試しましたが、大丈夫でした。

【43964】Re:Excelで使用したファイルを監視する方...
回答  初心者  - 06/10/31(火) 12:02 -

引用なし
パスワード
   >PCの監視ですか?それとも特定のExcelファイルですか?
Statis さん、他部署の個人情報などが入っているようなファイルです。
どうもおかしな行動が。。。
お恥ずかしい話です。

【43971】Re:Excelで使用したファイルを監視する方...
お礼  初心者  - 06/10/31(火) 13:02 -

引用なし
パスワード
   りんさんご返答有難うございます。
りんさんのご回答は当方の欲しかった内容です。
ただ、正直内容は???といった感じでしたが、当方の知識不足が原因です。
今後大事に至らない為にもりんさんに教えていただいた方法で対応してみたいと思います。
またお伺いするかも知れませんが、ご教授ください。

【43977】Re 教えて君ですいません2
質問  朝顔  - 06/10/31(火) 15:48 -

引用なし
パスワード
   りん さん、こんにちは

>以下を全てThisWorkbookに記述し、一旦保存後、アドインを作成(名前をつけて保存・形式をxlaにする)。
>ブックを保存する前に、VBAProjectに保護をかけておいた方がいいと思います。

これだけだとエラーメッセージが出るので調べたところ
ThisWorkBook のプロパティウィンドウにある IsAddin プロパティを True にする
という操作が必要でした。
でアドインまではうまくいきましたが、

>2000以降の場合は、
>  C:\Documents and Settings\(ユーザー名)\Local Settings\Temp

当方X-PですがC:\Documents and Settings\(ユーザー名)以下のフォルダに
\Local Settingsというフォルダが見あたりません(;_; )
この前再インストしたばかりなのですが、壊れかけ中なのでしょうか。

【43978】Re:Re 教えて君ですいません2
発言  Kein  - 06/10/31(火) 16:05 -

引用なし
パスワード
   OSの種類に拘わらず、TemporaryFolderのパスを取得したいなら

  MsgBox CreateObject("Scripting.FileSystemObject") _
  .GetSpecialFolder(TemporaryFolder).Path

【43979】Re:Re 教えて君ですいません2
お礼  朝顔  - 06/10/31(火) 16:32 -

引用なし
パスワード
   Kein さんアドバイスありがとうございます。
>  MsgBox CreateObject("Scripting.FileSystemObject") _
>  .GetSpecialFolder(TemporaryFolder).Path

を使いwindouwsフォルダの下にあることがわかりました。
しかしそのテンプフォルダの中にはExcel_OC.LOG
は見あたりませんでした。

【43980】Re:Re 教えて君ですいません2
発言  りん E-MAIL  - 06/10/31(火) 17:55 -

引用なし
パスワード
   朝顔 さん、こんばんわ。

>を使いwindouwsフォルダの下にあることがわかりました。
>しかしそのテンプフォルダの中にはExcel_OC.LOG
>は見あたりませんでした。

このコードを全て標準モジュールに貼り、Testを実行してみてください。
Sub Test()
  MsgBox TempPATH, vbInformation, Space(20) + "↓ここ"
End Sub
Function TempPATH()
  Dim obj1 As Object
  Set obj1 = CreateObject("Scripting.FileSystemObject")
  TempPATH = obj1.GetSpecialFolder(2).Path
End Function
Keinさんのと同じ結果になるとは思いますが。

もし、C:\Windows\TEMPなのだとしたら、XPではWindowsフォルダは管理者権限が無いとロックがかかってるはずなので、テンプフォルダに書き込めなくなってるのでしょうかね。

MyDocumentsフォルダにログを作るほうが無難かもしれません。

【43998】Re:Re 教えて君ですいません2
発言  朝顔  - 06/10/31(火) 20:53 -

引用なし
パスワード
   りんさん、こんばんは

>このコードを全て標準モジュールに貼り、Testを実行してみてください。

実行した所
C\DOCUME^\asagao\LOCALS^1\Temp

と出てきました。しかしやはりasagaoフォルダには見あたらないので
自分でLocal Settingsというフォルダを作ろうとしたら、既にあるとエラー表示
自分のパソコンなのでアカウントを確認してもやはりパソコン管理者になっているし
何故表示されないのか、ちょっと又色々試してみます。

【43999】Re:Re 教えて君ですいません2
発言  りん E-MAIL  - 06/10/31(火) 20:57 -

引用なし
パスワード
   朝顔 さん、こんばんわ。

>>このコードを全て標準モジュールに貼り、Testを実行してみてください。
>
>実行した所
>C\DOCUME^\asagao\LOCALS^1\Temp
>
>と出てきました。しかしやはりasagaoフォルダには見あたらないので
>自分でLocal Settingsというフォルダを作ろうとしたら、既にあるとエラー表示
>自分のパソコンなのでアカウントを確認してもやはりパソコン管理者になっているし
>何故表示されないのか、ちょっと又色々試してみます。
フォルダオプションで、非表示になってるフォルダも表示設定にしてますか?

【44000】Re:Re 教えて君ですいません2
お礼  朝顔  - 06/10/31(火) 21:18 -

引用なし
パスワード
   りんさん、何度もありがとうございます。
隠しフォルダを解除してやっと目的のファイルにたどり着けました。
しっかりとOPENやCLOSEの記録がされていました。

私としては職場のパソコンは部署に一台しかなく、4月からパソコン係
になっているのですが、ファイルの置き場所が混沌としていて整理しなくては
と思っていました。
どのファイルをどれくらい使っているのかわかると重宝するので
このアドインを使いたいと思うのですが。
今の状態だとどのファイルを開く時もBOOK1も一緒に開いてしまうので
これをなんとかできませんでしょうか。
丸投げで申し訳ないです。

【44001】Re:Re 教えて君ですいません2
回答  りん E-MAIL  - 06/10/31(火) 21:47 -

引用なし
パスワード
   朝顔 さん、こんばんわ。

>隠しフォルダを解除してやっと目的のファイルにたどり着けました。
>しっかりとOPENやCLOSEの記録がされていました。
前回のアドイン用のコードの以下の部分を消去してください。

'オープン時のイベント
With Application.Workbooks
  If .Count = 0 Then .Add
End With

これがBook1が追加される原因です。
今回のパターンの場合はあえてブックを追加しなくてもエラーにならないようなので、消しても影響はなさそうです。

【44003】Re:Re 教えて君ですいません2
お礼  朝顔  - 06/10/31(火) 22:29 -

引用なし
パスワード
   ▼りん さん、何度もアドバイスありがとうございました。

>今回のパターンの場合はあえてブックを追加しなくてもエラーにならないようなの で、消しても影響はなさそうです。

該当コードを消してうまくいっております。
印刷ドキュメント記録と合わせてファイル管理の指標として重宝しそうです。

6656 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free