Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 删除使用并集插入的列_Excel_Vba - Fatal编程技术网

Excel 删除使用并集插入的列

Excel 删除使用并集插入的列,excel,vba,Excel,Vba,我有一些代码,其中我多次通过复选框插入了两列(如果用户单击名为Include_Weekends的框,则在项目期间插入两列)。如果项目持续10周,则将创建一个联合,该联合将插入两列10次,以说明所有10个周末 无论出于什么原因,我都无法使用union删除插入的行(当用户松开框时),我必须求助于循环,如我的示例所示。是否有一种方法可以一次删除所有列(以加快代码的速度,而循环会单独删除每一列,而不是作为一个整体删除)。也许我使用了糟糕的编码实践,因为我对VBA w/excel还比较陌生,所以请原谅 P

我有一些代码,其中我多次通过复选框插入了两列(如果用户单击名为Include_Weekends的框,则在项目期间插入两列)。如果项目持续10周,则将创建一个联合,该联合将插入两列10次,以说明所有10个周末

无论出于什么原因,我都无法使用union删除插入的行(当用户松开框时),我必须求助于循环,如我的示例所示。是否有一种方法可以一次删除所有列(以加快代码的速度,而循环会单独删除每一列,而不是作为一个整体删除)。也许我使用了糟糕的编码实践,因为我对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

当您在
myWeekendUnion
左侧插入列时,无论您添加了多少列,此集合范围都会移动其地址。因此,当您尝试删除该范围时,它将从您的实际周末偏移。您应该首先插入列,然后设置联合的范围。然后,您可以简单地调用:

myWeekendUnion.EntireColumn.Delete

干杯,

是否无法使用union来插入和删除列?union仅定义变量的范围集。当你有了范围,你可以做任何事情(即删除列或行)。但我更大的收获是,您必须先插入列,然后使用Union将这些单元格设置为您的范围。如果需要进一步解释,请告诉我。问候。如果我不理解,我很抱歉。。。这是否意味着我应该通过代码中的反向循环重置union,然后在完成该循环后使用您提供的代码?