プロが教える店舗&オフィスのセキュリティ対策術

エクセルでマクロを使いコンピュータ名やエクセルの更新年月日などを表示したいのですが可能でしょうか?教えてください。

A 回答 (5件)

ひょんなことから解決の糸口を発見


ThisWorkBookのモジュールに

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
With ThisWorkbook
.CustomDocumentProperties("PC_Name") = Environ("ComputerName")
.CustomDocumentProperties("User_Name") = Environ("UserName")
.CustomDocumentProperties("Saved_Date") = Format(Now, "yyyy/mm/dd hh:nn:ss")
End With
End Sub

Private Sub Workbook_Open()
On Error Resume Next
With ThisWorkbook.CustomDocumentProperties
.Add Name:="PC_Name", _
LinkToContent:=False, _
Type:=msoPropertyTypeString, _
Value:=""
.Add Name:="User_Name", _
LinkToContent:=False, _
Type:=msoPropertyTypeString, _
Value:=""
.Add Name:="Saved_Date", _
LinkToContent:=False, _
Type:=msoPropertyTypeDate, _
Value:=0
End With
End Sub

二つ記述します。
これでメニュー → ファイル → プロパティ の
ユーザー設定タブに表示されます。(日時は日付のみ)
モジュールで確認したいときは(日時は秒まで表示)
標準モジュールに

Sub test()
Dim strMsg As String
With ThisWorkbook
strMsg = _
"PC名= " & .CustomDocumentProperties("PC_Name").Value
strMsg = strMsg _
& vbCrLf & "ユーザ名= " & .CustomDocumentProperties("User_Name").Value
strMsg = strMsg _
& vbCrLf & "VBAでの保存日= " & .CustomDocumentProperties("Saved_Date").Value
strMsg = strMsg _
& vbCrLf & "システム上の保存日= " _
& CreateObject("Scripting.FileSystemObject"). _
GetFile(ThisWorkbook.FullName).DateLastModified

End With
MsgBox strMsg
End Sub

ファイルサーバとクライアントマシンで時刻が違っていたり
保存時に時間がかかる場合を考慮すると
システム上の保存日を採用するべきですね。

※最後に保存したコンピュータや人を保存しているだけで
 履歴は求められません。
    • good
    • 0

こんぱんは。



>このエクセル表が他のコンピュータで更新されていた場合、何処のコンピュータで更新されたかをコンピューター名で判断したいのですが可能でしょうか?

必ずしもコンピュータ名ではありませんが、[共有設定]をしてあれば、Excelの中の、[ツール]-[変更履歴の表示]で、誰が変更したか分かるはずです。
    • good
    • 0

こんばんは。



#1 さんとかぶってしまいました。

更新日に関しては、私の方では、同じでしたが、.BuiltinDocumentProperties からと、外部から取得するのでは、秒のずれがあるという話も聞いたことがあります。


Sub GetProperties()
Dim CmpName As String
Dim LastSave As Date

With CreateObject("WScript.Network")
 CmpName = .ComputerName 'コンピュータ名
End With

With ThisWorkbook
 '更新日
 LastSave = .BuiltinDocumentProperties("Last Save Time")
End With
MsgBox "コンピュータ名: " & CmpName & vbCrLf & _
    "更新日: " & Format$(LastSave, "yy/MM/dd hh:nn:ss")
End Sub

この回答への補足

ありがとうございます。このエクセル表が他のコンピュータで更新されていた場合、何処のコンピュータで更新されたかをコンピューター名で判断したいのですが可能でしょうか?

補足日時:2007/03/14 22:53
    • good
    • 0

コンピュータ名


?environ("computername")
       ↑ コマンドプロンプトのSET コマンドで求められる環境変数です
ログオン名だと
?environ("username")

ファイル作成日
?CreateObject("Scripting.FileSystemObject").GetFile("g:\temp\book2.xls").DateCreated

ファイル更新日
?CreateObject("Scripting.FileSystemObject").GetFile("g:\temp\book2.xls").DateLastModified

ファイルアクセス日
?CreateObject("Scripting.FileSystemObject").GetFile("g:\temp\book2.xls").DateLastAccessed

エクセルに限らず使えます

この回答への補足

ありがとうございます。このエクセル表が他のコンピュータで更新されていた場合、何処のコンピュータで更新されたかをコンピューター名で判断したいのですが可能でしょうか?

補足日時:2007/03/14 22:53
    • good
    • 0

こんにちは。



コンピュータ名をメッセージボックスに表示

MsgBox CreateObject("Wscript.NetWork").ComputerName

エクセルの更新年月日をメッセージボックスに表示

MsgBox ThisWorkbook.BuiltinDocumentProperties("Last Save Time")

この回答への補足

ありがとうございます。このエクセル表が他のコンピュータで更新されていた場合、何処のコンピュータで更新されたかをコンピューター名で判断したいのですが可能でしょうか?

補足日時:2007/03/14 22:48
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!