Ошибка выполнения 91: переменная объекта или переменная блока не задана - почему я не могу отсортировать строки в листе? - PullRequest
0 голосов
/ 31 января 2019

В какой-то части своего кода я пытаюсь отсортировать строки, но сейчас не знаю, почему VBA показывает мне эту ошибку.

Я пытался снова установить переменную DBws перед With, и я пытался не использовать With, но это то же самое.В других кодах я уже использовал этот кусок кода таким же образом, и у меня не было никаких проблем.

Dim DBws as Worksheet
Set DBws = Target.Sheets("Raw Data")
Set HeaderCell = DataRng.Find("Received", LookAt:=xlPart)
If HeaderCell Is Nothing Then Set HeaderCell = DataRng.Find("Received", LookAt:=xlWhole)
LastR = lastRow(Tws, 1)
Set DataRng = DBws.Range(Cells(HeaderCell.Row, HeaderCell.Column), Cells(LastR, HeaderCell.Column))        

With DBws
    .Columns.AutoFit
    .AutoFilter.Sort.SortFields.Clear '<--- Debugging highlights this line
    .AutoFilter.Sort.SortFields.Add2 Key:= _
    DataRng, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
    :=xlSortNormal

    With .AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End With

1 Ответ

0 голосов
/ 31 января 2019

К сожалению, вы не сообщаете нам, в какой строке вашего кода происходит ошибка.Я подозреваю, что это должно быть на Set DataRng = DBws.Range(Cells(HeaderCell.Row, HeaderCell.Column)....Если это так, то ошибка происходит из этого небольшого кусочка illogic: -

Set HeaderCell = DataRng.Find("Received", LookAt:=xlPart)
If HeaderCell Is Nothing Then Set HeaderCell = DataRng.Find("Received", LookAt:=xlWhole)

Предполагая, что DataRng имеет значение, ранее определенное в вашем коде, вы ищете слово "Received" какчасть содержимого любой ячейки.Если он не найден, вы ищете ячейку, которая не содержит ничего, кроме «Получено».Если бы такая клетка существовала, она была бы найдена при частичном поиске.Поэтому, если он не был найден в первом поиске, он не будет найден и во втором.Если первый поиск неудачен, происходит второй.Если второй результат не появляется, ваш код вылетает в тот момент, когда вы пытаетесь использовать диапазон HeaderCell .

Я предлагаю вам посмотреть функцию Find.Многие его свойства запомнились из предыдущего использования.Поэтому, если вы используете функцию Find вручную, а затем запустите свой код, в котором большинство свойств не задано (и, следовательно, извлечено из памяти), вы должны ожидать неожиданного.

...