Ошибка RunTime 1004. Сортировать метод класса Range не удалось - PullRequest
1 голос
/ 21 апреля 2020

Я написал макрос VBA, который будет сортировать строки на основе пользовательских данных. Таким образом, если пользователь вводит 1, то сортировка будет выполняться на основе определенного условия, если 2, то другого условия и так далее. Однако, когда я запускаю код, я получаю ошибку «Ошибка времени выполнения 1004: сбой метода сортировки класса Range». Может ли кто-нибудь из экспертов VBA помочь, как я могу преодолеть эту ошибку. Ниже приведен весь блок кода:

Public Sub Sortlist()

Dim userinput As String
Dim tryagain As Integer

userinput = InputBox("1 = Sort By Division,2 = Sort by Category, 3 = Sort by Total sales")
If userinput = "1" Then
DivisionSort
ElseIf userinput = "2" Then
CategorySort
ElseIf userinput = "3" Then
TotalSort
Else
tryagain = MsgBox("Incorrect Value.Try again?", vbYesNo)
If tryagain = 6 Then
Sortlist
End If
End If

End Sub
------------------------------------
Sub DivisionSort()
'
' Sort List by Division Ascending
'

'
    Selection.Sort Key1:=Range("A4"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

End Sub
----------------------------------------------
Sub CategorySort()
'
' Sort List by Category Ascending
'

'
    Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

End Sub
--------------------------------
Sub TotalSort()
'
' Sort List by Total Sales Ascending
'

'
    Selection.Sort Key1:=Range("F4"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

End Sub

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

У меня возникла та же проблема при проведении онлайн-курса по Excel VBA. Скорее всего, тот же курс. Ошибка была в предоставленной электронной таблице курса. Мне удалось устранить проблему, и она была связана с этой проблемой, найденной в Интернете.

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/block-if-without-end-if?

Итак, более простое решение, но тогда мой P C перезагрузился, и я потерял макрос, который я отредактировал и приступил к работе.

Я попробовал "Fix" VBasic2008, и это также прекрасно работает.

Только мои комментарии о том, что я прошел , не пытаясь убедить или отговорить иначе.

Барри

0 голосов
/ 21 апреля 2020

CurrentRegion сохраняет день

Ваш код не удался, когда ваш Selection был вне диапазона. Поэтому я создал Sub с одним аргументом, названным SortRange, который использует CurrentRegion, чтобы всегда указывать на диапазон.

Option Explicit

Public Sub Sortlist()

    Dim userinput As String
    Dim tryagain As Integer

    userinput = InputBox("1 = Sort By Division,2 = Sort by Category, 3 = Sort by Total sales")

    If userinput = "1" Then
        DivisionSort
    ElseIf userinput = "2" Then
        CategorySort
    ElseIf userinput = "3" Then
        TotalSort
    Else
        tryagain = MsgBox("Incorrect Value.Try again?", vbYesNo)
        If tryagain = 6 Then
            Sortlist
        End If
    End If

End Sub
'------------------------------------
Sub SortRange(rng As Range)
        rng.CurrentRegion.Sort Key1:=rng, Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
End Sub
'------------------------------------
Sub DivisionSort()
'
' Sort List by Division Ascending
'
    SortRange Range("A4")

End Sub
'----------------------------------------------
Sub CategorySort()
'
' Sort List by Category Ascending
'
    SortRange Range("B4")

End Sub
'--------------------------------
Sub TotalSort()
'
' Sort List by Total Sales Ascending
'
    SortRange Range("F4")

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