Обнаружение проблемы в моем коде, чтобы сделать многоуровневую сортировку - PullRequest
0 голосов
/ 08 января 2019

Попытка выполнить эту многоуровневую сортировку путем копирования кода по этой ссылке. Я только вставил соответствующий код здесь

https://trumpexcel.com/sort-data-vba/

Public DestinationShVar as Worksheet
Public wDestination as workbook
  For Each sht In wDestination.Worksheets
  If sht.Name Like "*-*" Then Set DestinationShVar = sht
Next sht

With DestinationShVar.Sort
.SortFields.Add Key:=Range("AK1"), Order:=xlDescending
.SortFields.Add Key:=Range("B1"), Order:=xlAscending
.SetRange Range("A:GB")
.Header = xlYes
.Apply
End With

Я получаю ошибку

Переменная объекта не установлена ​​на

With DestinationShVar.Sort

Кто-нибудь знает почему?

1 Ответ

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

Публичный выпуск

  • Ошибка могла произойти, потому что вы не объявили шт переменная.
  • Вы должны включить фильтр в цикл, иначе он будет повторяться через листы и применить фильтр только к последнему найденному лист.
  • Вы не можете объявить переменную как Public внутри процедуры, Вы должны использовать Dim (или Static).

Код

Sub PublicIssue1()


    Dim WDestination As Workbook
    Dim sht As Worksheet

    Set WDestination = Worksbooks("Boo1.xls")

    For Each sht In WDestination.Worksheets

        If sht.Name Like "*-*" Then

            With sht.Sort
                .SortFields.Add Key:=Range("AK1"), Order:=xlDescending
                .SortFields.Add Key:=Range("B1"), Order:=xlAscending
                .SetRange Range("A:GB")
                .Header = xlYes
                .Apply
            End With

        End If

    Next sht

End Sub

Если вы объявляете переменную как Public , она должна быть перед всеми процедурами в модуле.

Public WDestination as Workbook

Sub PublicIssue2()

    Dim sht As Worksheet

    'Set WDestination = Worksbooks("Boo1.xls") ' If it is not set.

    For Each sht In WDestination.Worksheets

        If sht.Name Like "*-*" Then

            With sht.Sort
                .SortFields.Add Key:=Range("AK1"), Order:=xlDescending
                .SortFields.Add Key:=Range("B1"), Order:=xlAscending
                .SetRange Range("A:GB")
                .Header = xlYes
                .Apply
            End With

        End If

    Next sht

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