分类: WINDOWS
2010-08-30 15:30:49
さん
【修正】コードの見直し及び仕様変更をしました。
エクセルマクロです。
まず、そのBookにシートを追加してシート名を「閲覧履歴」とします。
次にVBエディタを開きプロジェクトエクスプローラ(プロジェクトエクスプローラが表示されていない時はメニューの表示より選択)で現在作業している
BookのThisWorkbookをダブルクリックしBookのコードウィンドウを開き、後述のコードを記述またはコピペ。記述が終わったらVBエディ
タを右上の☒で閉じれば完了です。
最初のWorkbook_Open部分のコードは、このBookを開いた時に自動実行される処理で、開いた日時とログインユーザー名が先ほど作成した「閲覧履歴」シートに順次書き込まれていきます。
ちなみにこのシートはパスワード「password」(コードの該当部分を書き換えることで変更可)で保護されています。
最後のWorkbook_BeforeClose部分のコードは、このBookを閉じようとしたとき保存を上書き確認なしに実行する処理です。
注1)さらなる機密保持のためにはVBエディタのメニューバーのツールバー→VBAProjectのプロパティでパスワード付きの保護も設定できます。
注2)マクロ無効で開かれた場合は保護のかかった「閲覧履歴」以外は表示されません。
───────────これより下がコードです───────────
Private Sub Workbook_Open()
For i = 1 To Worksheets.Count
Worksheets(i).Visible = xlSheetVisible
Next i
Worksheets("閲覧履歴").Activate
ActiveSheet.Unprotect "password"
閲覧者 = Application.UserName
i = 1
Do
With ActiveSheet
If .Cells(i, 1) = "" Then
.Cells(i, 1).Value = Now
.Cells(i, 2).Value = 閲覧者
Exit Do
End If
End With
i = i + 1
Loop
With ActiveSheet
.Protect "password", DrawingObjects:=True, Contents:=True, Scenarios:=True
.EnableSelection = xlNoSelection
End With
Worksheets("Sheet1").Activate
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Worksheets("閲覧履歴").Visible = xlSheetVisible
For i = 1 To Worksheets.Count
With Worksheets(i)
If .Name <> "閲覧履歴" Then .Visible = xlSheetVeryHidden
End With
Next i
Worksheets("閲覧履歴").Activate
Application.DisplayAlerts = False
ActiveWorkbook.Save
Application.DisplayAlerts = True
End Sub