2013-05-14 18 views
1

我正在處理一個有11種不同系統大小的電子表格,每個系統大小代表一列。我需要使用它來比較不同的系統大小,但需要能夠在特定時間選擇我想要的系統大小。例如,系統大小爲1300,2000,2000X,2500,2500X,3000,3000X,4500,6000,7000和9000,我可能需要比較2500,3000和4500.我在行中放了一個複選框3表示每個系統大小並將該複選框鏈接到它所在的同一單元格,因此對於系統1300,複選框位於單元格B3中並鏈接到單元格B3。我希望能夠進入併爲每個系統大小選擇每個複選框,然後能夠運行宏以保持其複選框被選中的列/系統大小,並刪除或隱藏其檢查的列/系統大小框未被選中。下面是我的代碼對系統1300如果未選中該列的複選框,如何使用If宏刪除列?

Dim System1300 As String 
System1300 = Range("B3").Value 
If Not System1300 Like "TRUE" Then 
ActiveSheet.Shapes.Range(Array("Check Box 1")).Select 
Selection.Delete 
Columns("B:B").Select 
Range("B2").Activate 
Selection.Delete Shift:=xlToLeft 
End If 

然而,出於某種原因,我是否選中複選框或不它刪除複選框和列。任何幫助是極大的讚賞。

回答

1

隱藏似乎更容易維護,所以這就是我在這裏:

Sub HideUncheckedColumns() 
Dim ws As Excel.Worksheet 
Dim ColumnCount As Long 
Dim cell As Excel.Range 

Set ws = ActiveSheet 'adjust as necessary 
ColumnCount = 11 'adjust as necessary 
With ws 
    For Each cell In .Range(.Cells(3, 1), .Cells(3, ColumnCount)) 
     cell.EntireColumn.Hidden = cell.Value = False 
    Next cell 
End With 
End Sub 

編輯:由於這裏要求這麼刪除FALSE(選中)列的版本。

關鍵的邏輯區別在於您必須向後循環單元格,即從右向左循環。否則循環索引將打破爲列被刪除:

Sub DeleteUncheckedColumns() 
Dim ws As Excel.Worksheet 
Dim ColumnCount As Long 
Dim i As Long 
Dim cell As Excel.Range 

Set ws = ActiveSheet 'adjust as necessary 
ColumnCount = 11 'adjust as necessary 
With ws 
    For i = ColumnCount To 1 Step -1 
     Set cell = .Cells(3, i) 
     If cell.Value = False Then 
      cell.EntireColumn.Delete 
     End If 
    Next i 
End With 
End Sub 

你可以通過消除cell變量,直接指.Cells(3, i)縮短它。我保留了它的一部分用於與前一版本進行比較,但主要是因爲我認爲它增加了代碼的易讀性。

+0

感謝Doug,我只是遇到了代碼中的一個問題。當代碼隱藏列時,它不會隱藏複選框,這會留下隨機取消選中的複選框。無論如何繞過這個或至少刪除未選中的複選框? – 2013-05-14 17:13:21

+0

選中複選框,單擊右鍵,選擇格式控制>屬性,然後選中「使用單元格移動和大小」。你可以在代碼中做到這一點,但它很容易選擇所有。 – 2013-05-14 17:41:37

+0

是的,我試圖這樣做,但由於某種原因,它不會允許我選擇該選項。我想知道爲什麼。 – 2013-05-14 17:42:51

相關問題