【发布时间】:2020-12-04 11:19:25
【问题描述】:
我在下面写了这段代码,但是当我在 D 列和 E 列中写一些东西并且只是为 C 列做自动填充时它才起作用。这个想法是,每当我在高于 4 行的任何单元格中写一些东西时,列是自动填充的。有谁知道它为什么不起作用,我该如何解决?
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Application.ScreenUpdating = False
If Target.Row >= 4 Then
Planilha3.Activate
ul = Cells(Rows.Count, "D").End(xlUp).Row
With Range("C4")
.FormulaR1C1 = "=RC[1]&RC[2]"
.AutoFill Destination:=Range("C4:C" & ul)
End With
With Range("B4")
.FormulaR1C1 = "=IF(RC[1]<>"""",COUNTIF(R4C3:RC[1],RC[1]),"""")"
.AutoFill Destination:=Range("B4:B" & ul)
End With
With Range("A4")
.FormulaR1C1 = "=RC[2]&RC[1]"
.AutoFill Destination:=Range("A4:A" & ul)
End With
With Range("J4")
.FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-7],'Lista de Fornecedores'!C1:C4,2,FALSE),""Forn não cadastrado"")"
.AutoFill Destination:=Range("J4:J" & ul)
End With
With Range("K4")
.FormulaR1C1 = "=IF(RC[-1]=""Forn não cadastrado"",""Forn não cadastrado"", ""Recebido"")"
.AutoFill Destination:=Range("K4:K" & ul)
End With
Application.EnableEvents = True
Application.ScreenUpdating = True
End If
End Sub
【问题讨论】:
-
我想了解为什么当我在 D203 中写一些东西时,什么都没有发生。但是如果我在 D203 和 E203 中写了一些东西,那么自动填充就会发生在 C 列中。
-
您可能想要做的第一件事是在
sub的末尾加上Application.EnableEvents = True和Application.ScreenUpdating = TrueIf语句。 (或在If语句的开头将它们设置为False)。 -
Target可能是一个多单元格范围,Target.Row将返回最小行号。这是您期望的行为吗? -
更改上述代码后,您的代码运行良好。顺便说一句,您不需要自动填充;您可以简单地将公式设置为多单元格范围,所有内容都会适当更新,例如
Range("C4:C" & ul).FormulaR1C1 = "=RC[1]&RC[2]" -
嘿!谢谢!!实际上,每当我更改从第 4 行开始的行中的任何单元格时,我都希望运行此代码。