Excel 需要有关自动用户名和时间的帮助吗

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

我正在使用一个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
    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栏代码工作,有什么评论吗?我不明白你的意思。也许你需要在你的原始问题中解释它,并添加一个屏幕截图或一些东西来更好地解释这个问题。