Я продолжаю получать ошибку «Несоответствие типов» при попытке L oop через диапазон ячеек - PullRequest
0 голосов
/ 20 февраля 2020

Я хочу удалить весь столбец, если заголовок в ячейках B5:P5 содержит указанный c текст.

Вот код, который у меня есть:

Sub Make_Prod()

Sheets("4. Partic Charges - Final").Select
Dim i As Long
Dim StartCell As Range
Dim EndCell As Range
Dim MyValue As Range
Set StartCell = Range("B5")
Set EndCell = StartCell.End(xlToRight)

'Delete IID, LastName, FirstName, SSN, DOB, DOT, VestBal, TotalSourceDH, HasCovg, and any blank headers with values in column

For i = StartCell To EndCell
    MyValue = Range(i & 5)
        If MyValue = "IID" _
        Or MyValue = "LastName" _
        Or MyValue = "FirstName" _
        Or MyValue = "SSN" _
        Or MyValue = "DOB" _
        Or MyValue = "DOT" _
        Or MyValue = "VestBal" _
        Or MyValue = "HasCovg" _
        Or MyValue = "" _
    Then Range(5 & i).EntireColumn.Delete

Next i

End Sub

Каждый когда я пытаюсь запустить код, я получаю

несоответствие типов

в моем операторе i = StartCell to EndCell.

Может ли кто-нибудь помочь мне с это?

1 Ответ

3 голосов
/ 20 февраля 2020

Непосредственной причиной вашей ошибки было то, что Nathan_Sav указывает, что вы пытаетесь l oop пройти через диапазон, используя число.

Попробуйте это. Когда вы удаляете столбцы, вам нужно выполнять итерацию в обратном направлении, чтобы избежать пропуска ячеек. Установите диапазон (который вы можете сделать в одной строке), а затем используйте переменную счетчика l oop через каждую ячейку.

Вам не нужно Select Case, вы можете придерживаться If, но на мой взгляд, немного яснее.

Sub Make_Prod()

Sheets("4. Partic Charges - Final").Select
Dim i As Long
Dim StartCell As Range
Dim EndCell As Range
Dim MyValue As Range
Set StartCell = Range("B5")
Set EndCell = StartCell.End(xlToRight)

'Delete IID, LastName, FirstName, SSN, DOB, DOT, VestBal, TotalSourceDH, HasCovg, and any blank headers with values in column
Dim r As Range, c As Long

Set r = Range(StartCell, EndCell)

For c = r.Count To 1 Step -1
    Select Case r.Cells(c).Value
         Case "IID", "LastName", "FirstName", "SSN", "DOB", "DOT", "VestBal", "HasCovg", ""
            r.Cells(c).EntireColumn.Delete
    End Select
Next c

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...