根据工作表1中输入的数据自动填充工作表2中的日期和用户名

时间:2017-03-27 16:54:47

标签: excel vba excel-vba offset

当它来到VBA时,我是一个相对缺乏经验的人,所以我希望我的问题能快速解决你所有的主人:

背景 我有一个用作数据输入文件的文件,其中不同的人在不同的列和不同的行中插入数据。我之前在同一张纸上有一个“签字”部分,其中一个单元格会自动填充用户的用户名和日期。因此,当有大量用户时,已明确1)由谁,以及2)在何时将数据插入文件。

我需要帮助 为了减少同一张纸上的信息量,我现在希望在另一张纸上设置“签收”部分。即当 Steve 在例如工作表1中的单元格F:15和G:34中插入数据时,我希望他的用户名和日期自动填充在相同的单元格中(即F:15和G) :34)在表2中。

数据输入范围 在表1中,从第3栏到第36栏&第4行到第44行。为简单起见,我将使Sheet 2看起来与Sheet 1完全相同。因此,Sheet 2上的“输出”范围相同。

当前代码 这是我的旧代码,我需要帮助重写,以便用户名和日期在工作表2上:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim c As Range

If Target.Column >= 3 And Target.Column <= 36 And Target.Row >= 4 And Target.Row <= 44 Then
For Each c In Target
    If c.Value = "" Then
        c.Offset(0, -6).Value = ClearContents
    Else
        c.Offset(0, -6).Value = Environ("username") & " " & Date
    End If
Next c
End If

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

只需要将值明确指定给Sheet 2.参见下文。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim c As Range

If Target.Column >= 3 And Target.Column <= 36 And Target.Row >= 4 And Target.Row <= 44 Then

Dim ws2 as Worksheet
Set ws2 = Worksheets("Sheet2")

For Each c In Target

    If c.Value = "" Then 
        ws2.Range(c.Address).ClearContents
    Else
        ws2.Range(c.Address).Value = Environ("username") & " " & Date
    End If

Next c

End If