使用`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
慢,因为它逐行运行代码。