
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
こんにちは。
私は、もう、あまりマクロは書いていませんが、一応、どんな感じかという紹介程度にさせていただきます。VBAを知っている人なら、このレベルのマクロは誰でも分かると思います。
誰が使ったかはシステムにお任せになってしまいますが、何時にどのぐらいの時間で、どのファイルを触ったかの記録は残りますので、自分のアリバイと、そこにいた人物の特定には可能ではないかと思います。これは、サーバー内では試していませんので、もしかしたら、問題があるかもしれませんが、必ず、Excelアプリの本体のあるHDからのアドインのとり付けになります。
このマクロは、アドインを外しても、外した時の記録が残ります。このパターンを利用して、ファイル自体のバックアップも可能です。ファイル自体は、マクロある・なしを問いません。ただ、現状では、同じ種類のマクロですとコンフリクトを起こして、エラーが発生します。発生場所は、標準モジュールですから、On Error Resume Next ~ On Error Goto 0 で囲えば、エラーだけは防げます。
現在、保存等の記録は、デフォルトパスのフォルダに record.iniという名前に排出されます。1M に達すると、そのファイルは.bak ファイルとなり、新しいファイルになります。ただし、記録は、1世代前までです。1日でも、使い方によっては、相当に大きくなる可能性があります。
クラスの中の、FilesizeCheckの以下の部分の[>=1 ]は、1Mbyte ですから、常識の範囲で、大きくしてもよいかもしれません。
If objFile.Size / (1024 * 1024#) >= 1 Then
ハングした場合も、途中までは記録されるはずです。もし、もっと隠すのでしたら、別のフォルダ(C:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Excel\ は、以下のように組み込みます。)
myPath = Application.StartupPath
i = InStrRev(myPath, "\")
myPath = Mid$(myPath, 1, i)
で決めることもできます。
なお、最終的には、パスワードを付けて、マクロの中身を見れないようにしてください。秘匿化していませんので、技術力の高い人なら、パスワード越しでも、見破られてしまいますが、逆に、見破るような人は、数多くはいないはずです。
アドイン化の方法は、マクロを貼り付けたら、保存の際に、.xlamを選べばよいのですが、書き換え等が発生したおりは、VBEモジュール内のみで行ってください。Excelファイル自体には、一切、マクロはありませんから、csvでも、記録に残ります。
不要になったら、アドインは外してください。
---------------------
ファイル名は、RecordAddin.xlam
'//--------
'ThisWorkbook モジュール
Private Sub Workbook_AddinInstall()
Call Module1.Auto_Open
End Sub
'標準モジュール Module1
Public myClass As Class1
Sub Auto_Open()
Set myClass = New Class1
Set myClass.myApp = Excel.Application
End Sub
'クラスモジュール Class1
Public WithEvents myApp As Excel.Application
Private Reco As String
Private objFS As Object
Private myFold As String
Private myPath As String
Private Const INIF As String = "record.ini" '記録ファイル名
Private Sub Class_Initialize()
myFold = Application.DefaultFilePath
myPath = myFold & INIF
If objFS Is Nothing Then
Set objFS = CreateObject("Scripting.FilesystemObject")
End If
Call FilesizeCheck
Reco = "App_Ini" & ", " & Format$(Now, "yymmdd hhMMss")
Editline Reco
End Sub
Private Sub myApp_NewWorkbook(ByVal Wb As Workbook)
'新しいブック
Reco = Wb.Name & ",new_book," & Format$(Now, "yymmdd hhMMss")
Editline Reco
End Sub
Private Sub myApp_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
'保存前
Reco = Wb.Name & ",close," & Format$(Now, "yymmdd hhMMss")
Editline Reco & vbCrLf
End Sub
Private Sub myApp_WorkbookBeforePrint(ByVal Wb As Workbook, Cancel As Boolean)
'印刷
Reco = Wb.Name & ",print," & Format$(Now, "yymmdd hhMMss")
Editline Reco
End Sub
Private Sub myApp_WorkbookOpen(ByVal Wb As Workbook)
'既存のブックを開ける
Reco = Wb.Name & ",open, " & Format$(Now, "yymmdd hhMMss")
Editline Reco
End Sub
Sub Editline(strTxt As String)
Dim UName As String
Dim objFile As Object
Dim objTxt As Object
Dim objFold As Object
UName = Application.UserName
If objFS Is Nothing Then
Set objFS = CreateObject("Scripting.FilesystemObject")
End If
If Dir(myFold & INIF) <> "" Then
Set objFile = objFS.GetFile(myPath)
Set objTxt = objFile.OpenAsTextStream(8, 0)
objTxt.WriteLine UName & "," & Reco
objTxt.Close
Else
Set objFold = objFS.GetFolder(myFold)
Set objFile = objFold.CreateTextFile(INIF)
objFile.WriteLine Reco
objFile.Close
End If
Set objFile = Nothing
Set objFold = Nothing
End Sub
Sub FilesizeCheck()
Dim objFile As Object
If objFS.FileExists(myPath) Then
Set objFile = objFS.GetFile(myPath)
If objFile.Size / (1024 * 1024#) >= 1 Then
On Error Resume Next
objFS.DeleteFile myFold & "record.bak", True
objFile.Name = "record.bak"
On Error GoTo 0
End If
Set objFile = Nothing
End If
End Sub
No.3
- 回答日時:
かなり遅くなってしまいましたが、気になっていたので、返事をさせていただきます。
興味が薄れてしまっていたら、無視して構いません。
まず、一般的な方法です。
一般的には、「校閲」の変更履歴の記録を設定します。
会社の許可があれば、IRMを取り付け、アクセス制限をします。
また、アドインで、特定のファイルをOpen時に、バックアップ取る方法が考えられます。
Excel内部のコマンドを使うと、非常に時間が掛かりますが、外部オブジェクトなら、時間はかかりません。1日1回のバックアップにします。
それ以外に、アドインで起動時にExcel使用のタイム・スタンプが取れます。こちらで試しに作って、本日、一日、エクセルのログを取ってみました。
仕組みは、エクセルを起動すると、"RecodeAddin" という、アドインも立ち上がりますから、その時に、アプリケーション・オブジェクトに、クラスから、インスタンスを取り付けて、後は、アプリケーション・オブジェクトのイベントにしたがって、Open やClose, New Book など、記録を取ります。これだけ、説明して、知っている方なら、分かると思います。
ファイル名は、recode.ini に入ります。
例:
ExcelFile2015 というファイルを開いた場合。
名前、ファイル名, 動作, 日にち, 時間
App_Ini, 160321 150627 *本体起動
(MyName),RecodeAddin.xlam,open, 160321 150627 *アドインが組み込まれた
(MyName),App_Ini, 160321 150627 *ローカルのアドインが組み込まれた
(MyName),PERSONAL.XLSB,open, 160321 150627 *個人用マクロブック
(MyName),Book1,new_book,160321 150627 *新規のブックが開いた
(MyName),ExcelFile2015.xlsm,open, 160321 151017 *ExcelFile2015を開いた
(MyName),RecodeAddin.xlam,close,160321 170507 *アドインを終了=>終了
(MyName),ExcelFile2015.xlsm,close,160321 170507 *ExcelFile2015を閉じて、終了
名前がない場合は、会社名などになってしまいますが、いつ、どのファイルを開いたかは全部記録に残ります。
いえ、気にして下さってありがとうございます。校閲は使用してみましたが、古いファイルを上書きされると意味がなかったのと、自分も混乱してきたのでやめました。
サーバーにおいてるファイルは最低限のアクセス制限はかけています。
最後の方法は私には難しい気がしますが、明日調べながら挑戦してみようと思います。途方に暮れていたので方法があることだけでも提示していただいただけでも助かりました。ありがとうございます。
No.2
- 回答日時:
>残念ながら前回保存者は社名でした。
保存された方のパソコンが 社名 で ログインされたパソコンと云う事です。
各自のパソコンにわかりやすい名前を付けてログインしてもらうしかありません。
社名でログインする位ですから、それなりに偉い方のパソコンかもしれませんね。
或いは、会社がパソコンを配布する時に社名で登録していて
使用者が変更して使うように指示が出ているのにそのまま使っているケースも
あるかもしれません。
犯人を捕まえて説教するしかないでしょうね。
返答が遅くなって申し訳ありませんでした。
恐らく会社のパソコンはほんどのひとが社名で登録され、使用者に変更の指示がなかったのでそのまま使用してますので、犯人は見つかりそうにないですね。
何度もご返答いただてありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- サーバー WIN10のファイル又はフォルダを社内LAN上HDDで共有する場合、特定の人だけが見えるようにしたい 3 2023/04/18 00:32
- PDF エクセルのVBAでファイルをpdfで保存するとソフトによっては開けなくなる 3 2022/06/08 10:20
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Windows 10 今ならまだ聞けるWindows11 3 2022/12/30 14:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのプロパティーでセキ...
-
Wordで差込印刷した後に別々の...
-
ExcelブックをGoogleスプレッド...
-
ファイルのアクセス回数について
-
エクセルファイル名に更新日時...
-
Excel csv保存 列数が異なる場...
-
Word2010で閉じるボタン押下後...
-
マクロ実行後、表示がおかしくなる
-
Excelのマクロファイルを開くと...
-
サブフォルダから部分一致のエ...
-
エクセルvbaでdocuworksprinter...
-
カンマ区切りのCSVファイルから...
-
バッチファイル 別ファイルにリ...
-
同じファイル名 上書きしないフ...
-
エクセルで複数のコメントのサ...
-
エクセルVBAで一つ上の階層...
-
Windows10でコマンドプロンプト...
-
バイナリファイルの一部分をカ...
-
Vba初心者です。下記のコード助...
-
C ファイル出力で、フォルダが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのプロパティーでセキ...
-
ファイルのアクセス回数について
-
ExcelブックをGoogleスプレッド...
-
Wordで差込印刷した後に別々の...
-
Excel csv保存 列数が異なる場...
-
マクロ実行後、表示がおかしくなる
-
エクセル UserForm 呼び出しで...
-
エクセルファイル名に更新日時...
-
EXCEL 検索時の設定
-
サブフォルダから部分一致のエ...
-
PowerPoint 2002でファイル名を...
-
【Excel VBA】ファイルを保存し...
-
大量のCSVファイルをExcel形式...
-
複数のexcelのファイルを一括で...
-
実行時エラー52
-
エクセルのマクロで行と列の削...
-
For~Nextルーチンで最初の1回...
-
エクセルでcsvファイルを開いて...
-
VBAでエクセルで作成したフ...
-
Word2010で閉じるボタン押下後...
おすすめ情報
hallo-2007さんに教えていただいたところを確認しましたら、残念ながら前回保存者は社名でした。作成者は名前で表示されてたのですが…