是否有“更整齐”的方法来做到这一点?我的宏继续像这样的10英里长块。
是否可以删除多个单元格?如果我删除了多个单元格,则它不会替换空单元格。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("P9:P381")) Is Nothing Then
If IsEmpty(Target) = True Then
Range("P8").Select
Selection.Copy
Range("P" & Target.Row).Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
End If
If Not Intersect(Target, Range("R9:R381")) Is Nothing Then
If IsEmpty(Target) = True Then
Range("R8").Select
Selection.Copy
Range("R" & Target.Row).Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
End If
我是vba的初学者,我相信您会注意到这一点。
先谢谢您。
答案 0 :(得分:0)
您可以替换
Range("P8").Select
Selection.Copy
Range("P" & Target.Row).Select
ActiveSheet.Paste
Application.CutCopyMode = False
使用
Range("p8").Copy Range("P" & Target.Row)
要删除一个单元格块,您需要指定要将单元格从哪个方向“滑入”。所以
Range("D3:F4").Delete xlShiftToLeft
会将右边的单元格带入间隙,而
Range("D3:F4").Delete xlShiftUp
将向上移动单元格。
编辑以添加: 如果要更改单元格更改事件中的单元格,则可能会遇到无限循环的危险,在此循环中,更改会触发代码中的另一个循环。为避免这种情况,您需要在代码开始时关闭事件,然后在结束时将其重新打开 所以:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = false
然后在最后
Application.EnableEvents = true
End Sub
答案 1 :(得分:0)
您必须循环访问c
中的所有单元格Target
,并检查每个单元格是否为空。
Dim c As Range
If Not Intersect(Target, Range("P9:P381")) Is Nothing Then
For Each c In Intersect(Target, Range("P9:P381"))
If IsEmpty(c) = True Then
Application.EnableEvents = False
c.Value = Range("P8").Value
Application.EnableEvents = True
End If
Next c
End If
与其他范围相同。