Excel 若单元格已更新,则在下一个空行中写入单元格值和时间戳

Excel 若单元格已更新,则在下一个空行中写入单元格值和时间戳,excel,vba,Excel,Vba,我试图用时间戳更新一列,用更新更新另一列(从特定单元格中获取) 期望的行为: A2已写入xy。该更改触发一个宏,该宏将时间戳放在第2行的C列中,将更新放在第2行的D列中。 如果A2中进行了新的更新:如果C2不是空的,则跳转到C3并在D3上放置时间戳和更新,依此类推 不幸的是,它将第一个更新时间戳和更新放在列中,但是如果我再次更新,它不会跳转并将更新放在那里 Private子工作表\u更改(ByVal目标作为范围) Dim Xcell列为整数 Dim xCellRow作为整数 Dim xTim

我试图用时间戳更新一列,用更新更新另一列(从特定单元格中获取)

期望的行为:
A2已写入xy。该更改触发一个宏,该宏将时间戳放在第2行的C列中,将更新放在第2行的D列中。
如果A2中进行了新的更新:如果C2不是空的,则跳转到C3并在D3上放置时间戳和更新,依此类推

不幸的是,它将第一个更新时间戳和更新放在列中,但是如果我再次更新,它不会跳转并将更新放在那里


Private子工作表\u更改(ByVal目标作为范围)
Dim Xcell列为整数
Dim xCellRow作为整数
Dim xTimeColumn作为整数
将xTimeRow设置为整数
Dim XUPDATE列为整数
Dim xUpdateRow作为整数
Dim xRow,xCol为整数
xcell列=2
xCellRow=10
xTimeColumn=6
xTimeRow=2
xUpdateColumn=7
xUpdateRow=2
i=2
xCol=Target.Column
xRow=Target.Row
如果是Target.Text“”,则
如果xCol=xcell列,则
如果xRow=xCellRow,则
Do While范围(“Munka1”).单元格(i,xTimeColumn).Value“”
i=i+1
环
单元格(i,xTimeColumn)=现在()
单元格(i,xUpdateColumn)=目标值
如果结束
如果结束
如果结束
端接头
请尝试以下操作:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xCellColumn As Long
    Dim xCellRow As Long
    Dim xTimeColumn As Long
    Dim xUpdateColumn As Long
    Dim SupervisedArea As Range
    Dim i As Integer

    xCellColumn = 2
    xCellRow = 10
    xTimeColumn = 6
    xUpdateColumn = 7

    If Target.Text <> "" Then
        ' If any changed value in the whole column should generate a new data pair:
        'Set SupervisedArea = Intersect(Target, Me.Columns(xCellColumn))
        ' If only one cell should be supervised:
        Set SupervisedArea = Intersect(Target, Me.Cells(xCellRow, xCellColumn))
        If Not SupervisedArea Is Nothing Then
            i = 2
            Do While Me.Cells(i, xTimeColumn).Value <> ""
              i = i + 1
            Loop
            Application.EnableEvents = False
            Me.Cells(i, xTimeColumn) = Now()
            Me.Cells(i, xUpdateColumn) = Target.Value
            Application.EnableEvents = True
        End If
    End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
Dim Xcell列的长度
长得一样暗
Dim xTimeColumn尽可能长
Dim XUPDATE列的长度为
Dim监控区域As范围
作为整数的Dim i
xcell列=2
xCellRow=10
xTimeColumn=6
xUpdateColumn=7
如果是Target.Text“”,则
'如果整列中的任何更改值应生成新的数据对:
'Set-SuperviedArea=Intersect(目标,Me.Columns(xCellColumn))
'如果只应监督一个单元:
设置受监控区域=相交(目标、Me.Cells(xCellRow、xCellColumn))
如果不受监管,那就什么都不是了
i=2
Do While Me.Cells(i,xTimeColumn).Value“”
i=i+1
环
Application.EnableEvents=False
Me.Cells(i,xTimeColumn)=Now()
Me.Cells(i,xUpdateColumn)=Target.Value
Application.EnableEvents=True
如果结束
如果结束
端接头

为了更好地理解我的问题,我已经修改了我的问题。还添加了两张图片。第一条评论,谢谢你的回答,不幸的是,我得到了关于范围的错误(宏见图片)。很抱歉,我没有使用excel编写宏这么多。现在,第2列中的每个更改都会在第6列和第7列中添加一个新的数据对。如果xRow=xCellRow或者如果xRow>xCellRow你可以另外添加
。非常感谢Asger。我修改并缩短了我的示例,使其更加清晰(至少对我或未来的读者来说更清晰,因为输入区域的位置有点混淆)。
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xCellColumn As Long
    Dim xCellRow As Long
    Dim xTimeColumn As Long
    Dim xUpdateColumn As Long
    Dim SupervisedArea As Range
    Dim i As Integer

    xCellColumn = 2
    xCellRow = 10
    xTimeColumn = 6
    xUpdateColumn = 7

    If Target.Text <> "" Then
        ' If any changed value in the whole column should generate a new data pair:
        'Set SupervisedArea = Intersect(Target, Me.Columns(xCellColumn))
        ' If only one cell should be supervised:
        Set SupervisedArea = Intersect(Target, Me.Cells(xCellRow, xCellColumn))
        If Not SupervisedArea Is Nothing Then
            i = 2
            Do While Me.Cells(i, xTimeColumn).Value <> ""
              i = i + 1
            Loop
            Application.EnableEvents = False
            Me.Cells(i, xTimeColumn) = Now()
            Me.Cells(i, xUpdateColumn) = Target.Value
            Application.EnableEvents = True
        End If
    End If
End Sub