是否有一个方法或一个对象与applicaton.
方法结合使用时,无论工作簿是打开还是关闭,它都会在日志中写入(在工作表的范围内)。
我没有制作两个子程序,一个用于打开的日志和一个用于关闭的日志,而是希望将两个日志组合在一起。
Option Explicit
Private Sub workbook_open()
Call Unprot
Sheets("log").Activate
Range("A1").Value = "Workbook Opened"
Range("B1").Value = "User"
Range("C1").Value = "LAN ID"
Range("D1").Value = "Computer"
Range("E1").Value = "Domain"
Range("F1").Value = "Count"
Rows("2:2").Insert
Range("F2").Value = Sheets("log").Range("F2").Value + 1
Range("A2").Value = Now
Range("B2") = Application.UserName
Range("C2") = Environ$("username")
Range("D2") = Environ$("computername")
Range("E2") = Environ$("USERDOMAIN")
Cells.EntireColumn.AutoFit
Call Prot
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call Unprot
Sheets("log").Activate
Range("H1").Value = "Workbook Closed"
Range("I1").Value = "User"
Range("J1").Value = "LAN ID"
Range("K1").Value = "Computer"
Range("L1").Value = "Domain"
Range("M1").Value = "Count"
Rows("2:2").Insert
Range("M2").Value = Sheets("log").Range("M2").Value + 1
Range("H2").Value = Now
Range("I2") = Application.UserName
Range("J2") = Environ$("username")
Range("K2") = Environ$("computername")
Range("L2") = Environ$("USERDOMAIN")
Cells.EntireColumn.AutoFit
Call Prot
End Sub
P.S。我相信我可以将这段代码压缩成for循环吗?
答案 0 :(得分:0)
将用于写入日志的代码放在单独的子例程或函数中,并从两个事件中调用子/函数。使用变量来区分要写入日志的操作:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
call writeToLog "Workbook Closed"
End sub
Private Sub workbook_open()
call writeToLog "Workbook Opened"
end sub
sub writeToLog(strAction as string)
Call Unprot
Sheets("log").Activate
Range("H1").Value = strAction
Range("I1").Value = "User"
Range("J1").Value = "LAN ID"
Range("K1").Value = "Computer"
Range("L1").Value = "Domain"
Range("M1").Value = "Count"
Rows("2:2").Insert
Range("M2").Value = Sheets("log").Range("M2").Value + 1
Range("H2").Value = Now
Range("I2") = Application.UserName
Range("J2") = Environ$("username")
Range("K2") = Environ$("computername")
Range("L2") = Environ$("USERDOMAIN")
Cells.EntireColumn.AutoFit
Call Prot
end sub
答案 1 :(得分:0)
怎么样:
Private Sub Workbook_Open()
Call Unprot
writeLog "Workbook Opened"
Call Prot
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call Unprot
writeLog "Workbook Closed"
Call Prot
End Sub
Sub writeLog(openClose as String)
With Sheets("log")
Rows("2:2").Insert
Range("A2").Value = Now()
Range("B2") = Application.UserName
Range("C2") = Environ$("username")
Range("D2") = Environ$("computername")
Range("E2") = Environ$("USERDOMAIN")
Range("F2")= Sheets("log").Range("F2").Value + 1
Range("G2").Value = openClose
Cells.EntireColumn.AutoFit
End With
End Sub
我不会每次都写那个标题。只需手动编写一次,每次使用代码重写它都没有价值......除非你认为人们会覆盖。
注意:当您的页面空间不足时,此代码不会考虑在内。 Excel 2007及更高版本仅限于超过一百万行,因此您有大量时间,但如果您运行2003,则只有64k +行,这可能会快速耗尽,具体取决于使用情况。
<强> - 编辑 - 强>
如果你不介意条目“堆叠”而不是并排,这将是有效的。否则你必须建立一个偏移量来向右移动数据,或者在评论中提到Gary的学生提到的第二个子数据。