Политики могут быть запущены во всех приложениях.
Запустите сейчас скриншот, который вы это продемонстрировали.
Проблема, с которой вы сталкиваетесь, связана с тем, что вы удаляете столбцы внутри своего диапазона цикла. Когда вы удаляете столбец, диапазон, который вы циклически изменяете, приводит к пропуску столбцов (в соответствии с вашими результатами). Чтобы бороться с этим, вы можете использовать метод Union
, который позволяет удалять столбцы вне цикла, чтобы вы не столкнулись с сообщенной проблемой. В нижнем решении показано, как исправить сообщенную проблему, если вы решили удалить столбцы внутри цикла.
Select Case
. Прокрутите диапазон и, если ячейка отсутствует в списке в первом случае, она будет помечена для удаления во втором случае (Case Else
).
После того, как вы зациклили свои заголовки, удалите все столбцы сразу, что означает, что во время зацикливания смещения диапазона не будет.
Sub DeleteColumns()
Dim iCell As Range, DeleteMe As Range
For Each iCell In Range("A1:W1")
Select Case iCell
Case "Cartons", "ShipVia", "Name", "Address", "City", "State", "Zip"
'Do Nothing
Case Else
If Not DeleteMe Is Nothing Then
Set DeleteMe = Union(DeleteMe, iCell)
Else
Set DeleteMe = iCell
End If
End Select
Next iCell
If Not DeleteMe Is Nothing Then DeleteMe.EntireColumn.Delete
End Sub
Вы также можете перебирать массив. Обратите внимание, что цикл столбца движется в обратном направлении, чтобы остановить смещение соответствующего диапазона внутри цикла (ваша первоначальная проблема). Для этого вам нужно сбросить цикл For Each
и переключиться на For j = # - #
, чтобы вы могли использовать свойство Step -1
Sub Array_Method()
Dim Arr: Arr = Array("Cartons", "ShipVia", "Name", "Address", "City", "State", "Zip")
Dim i As Long, j As Long
For j = 23 To 1 Step -1
For i = UBound(Arr) To LBound(Arr)
If Arr(i) = Cells(1, j) Then
Cells(1, j).EntireColumn.Delete
End If
Next i
Next j
End Sub