从Excel / VBA中排除select的列

我想select电子表格中的所有列,除了列名(列的第一行中的值)指定的列以外,列名将作为parameter passing到子列表中,例如:

Sub selectAllExcept(columns) With ActiveSheet LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column End With Range(Columns(1), Columns(LastCol)).EntireColumn.Select End Sub 

然而,我不知何故希望能够指定,我希望所有的列(首先到最后)不包括由列参数指定的,我想一个逗号分隔的string:

 columns = "ColumnName1, ColumnName3" 

如果列参数包含一个实际上不是列名的string,代码也不会中断。

 Sub SelectAllExcept(ByVal except_those As String) Dim cn() As String cn = Split(except_those, ",") Dim i As Long, j As Long For i = LBound(cn) To UBound(cn) cn(i) = Trim$(cn(i)) Next Dim r As Range For i = 1 To ActiveSheet.UsedRange.Columns.Count If Not is_in_array(cn, ActiveSheet.Cells(1, i).Value) Then If r Is Nothing Then Set r = ActiveSheet.Columns(i) Else Set r = Application.Union(r, ActiveSheet.Columns(i)) End If End If Next If Not r Is Nothing Then r.Select End If End Sub Private Function is_in_array(arr() As String, val As String) As Boolean Dim i As Long For i = LBound(arr) To UBound(arr) If StrComp(arr(i), val, vbTextCompare) = 0 Then is_in_array = True Exit Function End If Next End Function