1

我正在使用一个电子表格,上面有 11 个不同的系统大小,每个系统大小代表一列。我需要使用它来比较不同的系统大小,但需要能够在某些时候选择我想要的系统大小。例如,系统大小为 1300、2000、2000X、2500、2500X、3000、3000X、4500、6000、7000 和 9000,我可能需要比较 2500、3000 和 4500。我在行中放置了一个复选框3 在这些列的每一个中表示每个系统大小,并将该复选框链接到它所在的相同单元格,因此对于系统 1300,复选框位于单元格 B3 中并链接到单元格 B3。我希望能够进入并为每个系统大小选择每个复选框,然后我希望能够运行宏来保留选中复选框的列/系统大小,并删除或隐藏选中的列/系统大小框未选中。以下是我为系统 1300 提供的代码。

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

但是,由于某种原因,无论我是否选中了复选框,它都会删除复选框和列。任何帮助是极大的赞赏。

4

1 回答 1

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)。我保留它部分是为了与以前的版本进行比较,但主要是因为我认为它增加了代码的易读性。

于 2013-05-14T14:59:14.123 回答