如果行中的其他列不为空,请填充列

时间:2016-01-11 20:05:50

标签: excel vba excel-vba

  1. Microsoft Office Excel启用宏的工作表2007
  2. Microsoft Visual Basic
  3. 我一直在寻找解决问题的方法,而且无法找到解决问题的关键。

    案例

    在工作表中,我需要在指定的列范围之后立即自动将值(静态时间戳)插入到列中,条件是它们都不为空(已填充)。

    示例目标

    考虑到将值一个接一个地插入行的顺序,当列nextImage列范围内的值被填充时,我想要列A:C(指定范围之后的下一个)更新。

    D

    我得到了什么?

    现在,当我在列ColumnA ColumnB ColumnC AutoInsert filled filled filled 2016-01-11 20:57 filled filled filled filled filled filled 2016-01-11 20:58 中插入值时,当前时间戳显示在A列中。

    B

    目前的结果:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
            If Not Intersect(Target, Range("A:A")) Is Nothing Then
                With Target(1, 2)
                    .Value = Now
                End With
            End If
    End Sub
    

    我需要什么?

    我需要一些方法来检查行中指定范围的列,而不仅仅是上面显示的第一列(在我得到了什么?部分)。 < / p>

    我不确定是否需要除ColumnA AutoInsert value 2016-01-11 21:06 value 2016-01-11 21:06 value 2016-01-11 21:07 之外的其他方法,或某种循环。我尝试过IntersectTarget(x, y),但行为与预期不同,似乎适用于每个活跃的细胞。

1 个答案:

答案 0 :(得分:4)

试试这个:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
            If Not Intersect(Target, Range("A:C")) Is Nothing And WorksheetFunction.CountBlank(Range("A" & Target.Row & ":C" & Target.Row)) = 0 Then
                With Me.Cells(Target.Row, 4)
                    Application.EnableEvents = False
                    .value = Now
                End With
            End If
    Application.EnableEvents = True
End Sub

Me指的是工作表。它的工作原理是因为这是一个工作表事件。如果这是在模块中,则需要ActiveSheet.Cells是一个范围。它以这种格式Cells(Row,Column)使用。整件事可以改写为Me.Range("D" & Target.row)

目标是一个范围,而Target(row,column)Target.Cells(row,column)的简写,您可以放置​​Target(1,4)Target(1,1)会引用自己,或者是一系列单元格中的左上角单元格。它不受范围限制,但使用左上角的单元格作为起点。