使用`With`插入新行,而不是`.Select`

我在尝试使用代替插入新行时的.select代码时遇到了麻烦。 我已经多次被告知, .select不被使用,因为它是慢得多。

我的macros创build一个新的行,但删除下面的行中的内容,并复制当我使用.select时从未发生过的行的格式。 这也意味着单元格B11中增加的数字是不正确的,因为它从下面清除的内容再次从1开始。

 Sub New_Entry() Application.ScreenUpdating = False Application.EnableEvents = False Dim rng As Range Set rng = Range("B11:AB11") With rng .Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove End With Application.CutCopyMode = False With rng .ClearContents .Interior.ColorIndex = xlNone .Borders.LineStyle = xlContinuous End With With Range("B11") .Value = Range("B12") + 1 End With With rng .Font.Bold = False .Font.ColorIndex = xlAutomatic .Font.TintAndShade = 0 End With Application.EnableEvents = True Application.ScreenUpdating = True End Sub 

任何帮助将不胜感激,谢谢!

插入后,范围“rng”似乎下移。 这里是我将采取的路线:

 Sub New_Entry() Application.ScreenUpdating = False Application.EnableEvents = False Range("B11:AB11").Insert Shift:=xlDown Range("B11").Value = Range("B12") + 1 With Range("B11:AB11") .Interior.ColorIndex = xlNone .Borders.LineStyle = xlContinuous .Font.Bold = False .Font.ColorIndex = xlAutomatic .Font.TintAndShade = 0 End With Application.EnableEvents = True Application.ScreenUpdating = True End Sub 

据我所见,你有两个问题:

1.为什么这会删除内容?

那是因为你的Set rng = Range("B11:AB11") .ClearContents Set rng = Range("B11:AB11") ,并且在插入一行的同时执行.ClearContents

您可以通过切换代码的​​顺序来检查。 所有With相同条件的语句总是同时运行。

2.为什么复制格式?

格式实际上并不复制,您正在使用.Borders.LineStyle = xlContinuous格式化您创build的每一行。

这应该工作:

 Sub New_Entry() Application.ScreenUpdating = False Application.EnableEvents = False Dim rng As Range Set rng = Range("B11:AB11") With rng '.ClearContents .Interior.ColorIndex = xlNone '.Borders.LineStyle = xlContinuous 'End With 'With rng .Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove End With Application.CutCopyMode = False With Range("B11") .Value = Range("B12") + 1 End With With rng .Font.Bold = False .Font.ColorIndex = xlAutomatic .Font.TintAndShade = 0 End With Application.EnableEvents = True Application.ScreenUpdating = True End Sub 

.Select慢,因为它逐行运行代码。