我有一些代码,我通过复选框多次插入两列(如果用户单击名为Include_Weekends的框,则在项目持续时间内插入两列)。如果项目持续10周,则会创建一个联合,它会插入两列10次以占所有10个周末。
无论出于何种原因,我无法使用联合删除插入的行(当用户取消选中框时),我必须使用循环,如我的示例所示。有没有办法一次删除所有列(为了加快代码速度,而循环删除每个列而不是整个列)。也许我正在使用糟糕的编码练习,因为我对VBA w / excel仍然相对较新,所以请原谅。
Private Sub Include_Weekends_Click()
Dim myWeekendUnion as Range
Dim iWeekCount as Integer '# of weeks in project
Dim iFirstColumn as Integer 'First column in schedule
Dim xyz as Integer
Dim abc as Integer
iWeekCount = 5 'as an example... although this is user defined.
If ThisWorkbook.Sheets("Sheet1").Include_Weekends.Value = True Then
Set myWeekendUnion = Union(Columns((iFirstColumn) + 5), Columns((iFirstColumn) + 6))
If iWeekCount > 1 Then
For xyz = 2 To iWeekCount
Set myWeekendUnion = Union(myWeekendUnion, Columns((iFirstColumn) + (5 * xyz)), Columns((iFirstColumn) + (5 * xyz) + 1))
Next xyz
End If
myWeekendUnion.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Else
abc = iFirstColumn + (iWeekCount * 7) - 1
For abc= abc To (iFirstColumnGantt + 6) Step -7
ThisWorkbook.Sheets("Sheet1").Columns(abc).Delete
ThisWorkbook.Sheets("Sheet1").Columns(abc - 1).Delete
Next abc
End If
End Sub
答案 0 :(得分:0)
当您在myWeekendUnion
左侧插入列时,此设置范围会移动其地址但您添加的列数很多。因此,当您尝试删除范围时,它会偏离您的实际周末。您应首先插入列,然后设置执行Union
的周末范围。然后你可以简单地打电话:
myWeekendUnion.EntireColumn.Delete
干杯,