删除使用联盟

时间:2015-12-08 21:14:39

标签: excel vba excel-vba

我有一些代码,我通过复选框多次插入两列(如果用户单击名为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

1 个答案:

答案 0 :(得分:0)

当您在myWeekendUnion左侧插入列时,此设置范围会移动其地址但您添加的列数很多。因此,当您尝试删除范围时,它会偏离您的实际周末。您应首先插入列,然后设置执行Union的周末范围。然后你可以简单地打电话:

myWeekendUnion.EntireColumn.Delete

干杯,