2015-12-08 78 views
0

我有一些代碼,我通過複選框多次插入兩列(如果用戶單擊名爲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

當您插入列的myWeekendUnion左側這套範圍就將其地址,你加入然而,許多列。所以當你嘗試刪除範圍時,它會偏離實際的週末。您應該先插入列,然後設置週末的範圍Union。然後,你可以簡單地調用:

myWeekendUnion.EntireColumn.Delete 

乾杯,

+0

有沒有辦法使用工會都插入和刪除列? –

+0

聯盟只定義設置爲變量的範圍。當你有範圍時,你可以做任何事情(即刪除列或行)。但我最大的缺點是必須先插入列,然後使用Union將這些單元格設置爲您的範圍。讓我知道是否需要進一步的解釋。問候。 – nbayly

+0

對不起,如果我不理解......這是否意味着我應該通過我在代碼中的反向循環重置聯合,然後使用我通過該循環後提供的代碼? –