如果行中的其他列不为空,填充列
使用 :
- Microsoft Office Excelmacros启用工作表2007年
- Microsoft Visual Basic
我一直在寻找解决我的问题的方法,但却找不到解决问题的关键。
案件
在工作表中,我需要自动插入一个值(静态时间戳)到列的指定范围的列之后立足条件,他们都不是空(已被填充)。
示例目标
给定一个接一个地插入值的顺序,当列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
我得到了什么?
现在当我向列中插入值当前时间戳出现在列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
当前结果:
ColumnA AutoInsert value 2016-01-11 21:06 value 2016-01-11 21:06 value 2016-01-11 21:07
我需要什么?
我需要一些方法来检查行内的指定范围的列,不仅如上所示的第一列( 我得到了什么? )。
我不确定是否需要其他方法而不是Intersect
,或某种循环。 我尝试过使用Target(x, y)
和Range("A:C")
,但行为与预期不同,似乎应用于每个活动单元格。
尝试这个:
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是一个范围,并且Target(row,column)
是Target.Cells(row,column)
缩写。您可以放置Target(1,4)
。 Target(1,1)
本身或者单元格范围内的左上angular的单元格。 它不受范围的限制,而是以左上angular的单元格为起点。