Excel 删除使用并集插入的列
我有一些代码,其中我多次通过复选框插入了两列(如果用户单击名为Include_Weekends的框,则在项目期间插入两列)。如果项目持续10周,则将创建一个联合,该联合将插入两列10次,以说明所有10个周末 无论出于什么原因,我都无法使用union删除插入的行(当用户松开框时),我必须求助于循环,如我的示例所示。是否有一种方法可以一次删除所有列(以加快代码的速度,而循环会单独删除每一列,而不是作为一个整体删除)。也许我使用了糟糕的编码实践,因为我对VBA w/excel还比较陌生,所以请原谅Excel 删除使用并集插入的列,excel,vba,Excel,Vba,我有一些代码,其中我多次通过复选框插入了两列(如果用户单击名为Include_Weekends的框,则在项目期间插入两列)。如果项目持续10周,则将创建一个联合,该联合将插入两列10次,以说明所有10个周末 无论出于什么原因,我都无法使用union删除插入的行(当用户松开框时),我必须求助于循环,如我的示例所示。是否有一种方法可以一次删除所有列(以加快代码的速度,而循环会单独删除每一列,而不是作为一个整体删除)。也许我使用了糟糕的编码实践,因为我对VBA w/excel还比较陌生,所以请原谅 P
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
当您在
myWeekendUnion
左侧插入列时,无论您添加了多少列,此集合范围都会移动其地址。因此,当您尝试删除该范围时,它将从您的实际周末偏移。您应该首先插入列,然后设置联合的范围。然后,您可以简单地调用:
myWeekendUnion.EntireColumn.Delete
干杯,是否无法使用union来插入和删除列?union仅定义变量的范围集。当你有了范围,你可以做任何事情(即删除列或行)。但我更大的收获是,您必须先插入列,然后使用Union将这些单元格设置为您的范围。如果需要进一步解释,请告诉我。问候。如果我不理解,我很抱歉。。。这是否意味着我应该通过代码中的反向循环重置union,然后在完成该循环后使用您提供的代码?