VBA: ошибка времени выполнения 91 с Find-кодом сработал вчера, теперь он наполовину работает - PullRequest
1 голос
/ 27 июня 2019

Я получаю ошибку времени выполнения 91 в этой строке: ws.Rows ("1: 1"). Select.Find (T) .EntireColumn.Delete

На днях код работал хорошо,Сегодня это не так.Иногда я получаю ошибку в первом цикле кода, иногда это будет частично.* Внимание! Я очень новичок в vba

Спасибо большое, я долго боролся с этим.Было бы здорово, если бы вы могли объяснить, в чем мои проблемы, чтобы я мог учиться!:)

Я просмотрел все другие посты, связанные с этой проблемой, но проблемы не были достаточно связаны, чтобы я мог решить их.Я попытался прочитать некоторые статьи по определению объектов.Я использовал команду msgbox, чтобы убедиться, что коды находят значения и что швы работают все время, но она разбивается по команде 'find'.

Sub DeleteBadHeaders2()
    Dim FirstHeading As Range
        Set FirstHeading = Worksheets("Headings_To_Delete").Range("a2")
'Worksheet that has all the column headings I want deleted
    Dim x As Integer
'x is for the do while loop to individually highlight each cell
    Dim y As Long
    y = Worksheets("Headings_To_Delete").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count
'y acts as the upper bound to the headings to delete column for the while loop
    Dim T As Variant
'T acts as a temporary value holder that will be used to delete the proper columns
    Dim ws As Worksheet
        Set ws = ActiveSheet
    x = 0
    Do While x < (y - 1)
        Worksheets("Headings_To_Delete").Range("a2").Offset(x, 0).Interior.Color = RGB(224, 0, 0)
'Calling the rage as above fixes the active cell problem
        Let T = Worksheets("Headings_To_Delete").Range("a2").Offset(x, 0).Value
        'MsgBox T & " is found."
        ws.Rows("1:1").Select.Find(T).EntireColumn.Select
        'for testing switch the last part of the code to EntireColumn.Interior.Color = RGB(0, 225, 0)
        x = x + 1
     Loop
'The loop is highlighting the cells incrementally based on the first active cell until the upper limit of how many cells are in the column
End Sub

У меня естьтаблица данных со многими заголовками столбцов.У меня есть список всех заголовков столбцов, которые я не хочу в данных.Я хочу иметь надежный код VBA, который будет удалять заголовки столбцов, независимо от того, где они находятся на листе, и возможность для других, чтобы добавить другие столбцы для удаления, кто не знает, VBA

1 Ответ

4 голосов
/ 27 июня 2019
ws.Rows("1:1").Select.Find(T).EntireColumn.Select

должно быть

ws.Rows(1).Find(T).EntireColumn.Select  'Delete?

Обычно, хотя при использовании Find() неплохо проверить, действительно ли вы нашли что-либо, проверив возвращаемое значение для Nothing, прежде чем пытаться сделать что-то вроде Select или Delete.

Также неплохо было бы четко указать некоторые другие параметры в Find, такие как, например, lookAt.

Примерно так:

Sub DeleteBadHeaders()

    Dim r As Long, lastRow As Long
    Dim T As Variant
    Dim ws As Worksheet, wsList As Worksheet, f As Range

    Set ws = ActiveSheet

    Set wsList = Worksheets("Headings_To_Delete")
    lastRow = wsList.Cells(Rows.Count, 1).End(xlUp).Row 'last row

    For r = 2 To lastRow
        T = wsList.Cells(r, "A").Value
        If Len(T) > 0 Then
            Set f = ws.Rows(1).Find(what:=T, lookat:=xlWhole)
            'check to see if the heading was found
            If Not f Is Nothing Then
                Debug.Print "Found header '" & T & "' at " & f.Address
                f.EntireColumn.Interior.Color = vbRed  '<< for testing
                'f.EntireColumn.Delete                 '<< uncomment when done testing
            End If   'was found
        End If       'any heading
     Next r          'next in list

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