如何解决Excel中的日志文件
我正在尝试创建一个日志文件,其中将使用日期戳记录对单元格的更改。
日志文件需要从几个电子表格中进行记录。
我设法获得了记录更改的代码,并将其粘贴到每个电子表格中。
现在的问题是,来自不同电子表格的记录数据在同一列中,我无法确定它来自哪个电子表格。
如何调整以下代码将记录的数据从ABC列移动到EFG?
此外,如何添加特定单元格的记录,例如D4?
我对这些东西是全新的,所以请对我轻松一点。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strAddress As String
Dim val
Dim dtmTime As Date
Dim Rw As Long
If Intersect(Target,Range("A1:M1000")) Is Nothing Then Exit Sub
'change range to suit
dtmTime = Now()
val = Target.Value
strAddress = Target.Address
Rw = Sheets("Log Sheet").Range("A" & Rows.Count).End(xlUp).Row + 1
With Sheets("Log Sheet")
.Cells(Rw,1) = strAddress
.Cells(Rw,2) = val
.Cells(Rw,3) = dtmTime
End With
结束子
解决方法
将日志列从ABC更改为EFG
要将ABC更改为EFG,请在注释下方显示更改
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strAddress As String
Dim val
Dim dtmTime As Date
Dim Rw As Long
If Intersect(Target,Range("A1:M1000")) Is Nothing Then Exit Sub
'change range to suit
dtmTime = Now()
val = Target.Value
strAddress = Target.Address
Rw = Sheets("Log Sheet").Range("A" & Rows.Count).End(xlUp).Row + 1
With Sheets("Log Sheet")
.Cells(Rw,1) = strAddress --//Change 1 to 5 for E
.Cells(Rw,2) = val --//Change 2 to 6 for F
.Cells(Rw,3) = dtmTime --//Change 3 to 7 for G
End With
End Sub
注意:以上代码只是从您的问题中复制的,除了对这三行的注释。
添加已更改的工作表名称
要添加工作表源(例如H列),您可以在End With
的紧前面插入以下行:
.Cells(Rw,4) = ActiveSheet.Name --//Change 4 to 8 for H
记录特定单元格已更改
要仅在D4更改时进行记录,请将您的Range("A1:M1000)"
更改为Range("D4)"
请在所有涉及的工作表中使用下一个代码原样。但是您必须根据工作表名称和记录记录的列字母正确定义arrSheets
数组:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim arrSheets As Variant,El As Variant,colLetter As String
Dim strAddress As String,val,dtmTime As Date,Rw As Long
If Intersect(Target,Range("A1:M1000")) Is Nothing Then Exit Sub
arrSheets = Split("Sheet1|A,Sheet2|E,Sheet40|I",",") 'Fill here the involved sheets name and first col letter
For Each El In arrSheets
If Split(El,"|")(0) = Target.Parent.Name Then
colLetter = Split(El,"|")(1): Exit For 'define the area where the log to be done
End If
Next
'change range to suit
dtmTime = Now()
val = Target.value
strAddress = Target.Address
Rw = sheets("Log Sheet").Range(colLetter & Rows.count).End(xlUp).Row + 1
With sheets("Log Sheet")
.cells(Rw,colLetter).value = strAddress
.cells(Rw,colLetter).Offset(,1).value = val
.cells(Rw,2).value = dtmTime
End With
End Sub
如果要记录的页面频繁更改,更好的解决方案是在标准模块的顶部(声明区域)声明Public Const arrStr As String = "Sheet1|A,Sheet40|I"
。
然后,该事件将以以下方式创建数组:
arrSheets = Split(arrStr,")
通过这种方式,如果要涉及更多工作表,则任何代码更新都只能在Public
常量中的一个位置进行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。