Excel 需要有关自动用户名和时间的帮助吗
我正在使用一个Excel,其中我需要为两个条目的示例获取自动用户名和时间 1.如果我在第2列中插入一个值,我需要在单元格“a”和“O”中输入用户名和时间 2.在相同的Excel表格中,第(7)列的条目在单元格“I”和“N”处需要日期和用户名 我的代码为单点工作,我不知道如何使用两次 检查我尝试和建议的代码Excel 需要有关自动用户名和时间的帮助吗,excel,vba,Excel,Vba,我正在使用一个Excel,其中我需要为两个条目的示例获取自动用户名和时间 1.如果我在第2列中插入一个值,我需要在单元格“a”和“O”中输入用户名和时间 2.在相同的Excel表格中,第(7)列的条目在单元格“I”和“N”处需要日期和用户名 我的代码为单点工作,我不知道如何使用两次 检查我尝试和建议的代码 Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim rng As Range, c As Range S
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim rng As Range, c As Range
Set rng = Application.Intersect(Target, Me.Columns(2))
If rng Is Nothing Then Exit Sub
For Each c In rng.Cells
If Len(c.Value) > 0 Then
If Len(c.Offset(0, -1).Value) = 0 Then
With c.EntireRow
.Cells(1, "A").Value = Now()
'.Cells(1, "B").Value = Date
.Cells(1, "O").Value = Environ("username")
End With
End If
End If
Set rng = Application.Intersect(Target, Me.Columns(7))
If rng Is Nothing Then Exit Sub
For Each c In rng.Cells
If Len(c.Value) > 0 Then
If Len(c.Offset(0, -1).Value) = 0 Then
With c.EntireRow
.Cells(1, "I").Value = Now()
'.Cells(1, "B").Value = Date
.Cells(1, "N").Value = Environ("username")
End With
End If
End If
Next c
End Sub
如果我做对了,这对我很有用:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
If Me.Cells(Target.Row, 1) = vbNullString Then Me.Cells(Target.Row, 1) = Now()
If Me.Cells(Target.Row, 15) = vbNullString Then Me.Cells(Target.Row, 15) = Environ("username")
ElseIf Target.Column = 7 Then
If Me.Cells(Target.Row, 9) = vbNullString Then Me.Cells(Target.Row, 9) = Now()
If Me.Cells(Target.Row, 14) = vbNullString Then Me.Cells(Target.Row, 14) = Environ("username")
End If
End Sub
我想我不确定您是否希望日志记录位于插入数据的同一行,或者总是在同一单元格中重写它。问题行是
,如果rng为Nothing,则退出Sub
,因为如果目标
不在第2列,则退出Sub,并且永远不会到达第7列的第二个测试
因此,如果rng不是空的,请使用,然后改用:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim rng As Range, c As Range
Set rng = Application.Intersect(Target, Me.Columns(2))
If Not rng Is Nothing Then
For Each c In rng.Cells
If Len(c.Value) > 0 Then
If Len(c.Offset(0, -1).Value) = 0 Then
With c.EntireRow
.Cells(1, "A").Value = Now()
'.Cells(1, "B").Value = Date
.Cells(1, "O").Value = Environ("username")
End With
End If
End If
Next c
End If
Set rng = Application.Intersect(Target, Me.Columns(7))
If Not rng Is Nothing Then
For Each c In rng.Cells
If Len(c.Value) > 0 Then
If Len(c.Offset(0, -1).Value) = 0 Then
With c.EntireRow
.Cells(1, "I").Value = Now()
'.Cells(1, "B").Value = Date
.Cells(1, "N").Value = Environ("username")
End With
End If
End If
Next c
End If
End Sub
① 您的第一行代码缺失,但对我们很重要。•② 请阅读并提供问题的完整示例,包括示例输入和所需输出数据。屏幕截图在这里也可能有帮助。是的,我的第一个留置权是“私有子工作表_Change(ByVal Target As Excel.Range)”。请注意,如果Target
不是单个单元格而是一个范围,则此操作将失败。这会破坏复制/粘贴范围的功能。为了避免这种情况,请像OP已经正确执行的那样使用Intersect
。•并在两个不同的If
语句中执行Target
可以同时包含第2列和第7列,这是ElseIf
所不包含的。我从未学会使用intersect@Pᴇʜ我在这里怎么用<代码>如果相交(Me.Columns(2),Target),则
如果其位于第2列,则此操作有效,但不适用于任何其他列。与OP完全相同。他所做的一切都是正确的(包括循环通过代码中缺失的相交范围),但如果Target
不是第2列,他将退出sub,因此永远不会达到第7列的第二个测试。看看我的答案。晚餐达米安工作正是我所期望的,谢谢lot@MastanShaik你应该检查PEH的答案,如果你粘贴多个单元格,我的答案将不起作用。Supery PEH,工作完全符合我的预期,非常感谢亲爱的PEH,感谢你的帮助,一个小小的疑问,我们在excel中的工作方式是,首先,第2列填好了,然后我们得到了自动日期和用户名,第二,第7栏填好了,然后我们需要自动日期和用户名,这里发生的是,如果第2栏填好了,第一部分代码工作正常,但第二部分没有,如果第2栏没有填好,那么只有第7栏代码工作,有什么评论吗?我不明白你的意思。也许你需要在你的原始问题中解释它,并添加一个屏幕截图或一些东西来更好地解释这个问题。