Ошибка перемещения метода класса листа - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь расположить вкладки в рабочей книге, используя кодировку, найденную в Интернете, как показано ниже, однако после размещения некоторых листов в рабочей книге возникает следующая ошибка: «Ошибка времени выполнения« 1004 »; сбой метода перемещения класса рабочего листаЯ несколько раз прошел макрос и, кажется, работает нормально, пока не наткнется на лист, который не был переименован. Вот тогда и возникает ошибка. Строка, на которой это происходит, Sheets(j).Move After:=Sheets(j + 1)

кодировка выглядит следующим образом:

Sub Sort_Active_Book()
Dim i As Integer
Dim j As Integer
Dim iAnswer As VbMsgBoxResult
'
'
   iAnswer = MsgBox("Sort Sheets in Ascending Order?" & Chr(10) _
     & "Clicking No will sort in Descending Order", _
     vbYesNoCancel + vbQuestion + vbDefaultButton1, "Sort Worksheets")
   For i = 1 To Sheets.Count
      For j = 1 To Sheets.Count - 1
'
' If the answer is Yes, then sort in ascending order.
'
         If iAnswer = vbYes Then
            If UCase$(Sheets(j).Name) > UCase$(Sheets(j + 1).Name) Then
               Sheets(j).Move After:=Sheets(j + 1)
            End If
'
' If the answer is No, then sort in descending order.
'
         ElseIf iAnswer = vbNo Then
            If UCase$(Sheets(j).Name) < UCase$(Sheets(j + 1).Name) Then
               Sheets(j).Move After:=Sheets(j + 1)
            End If
         End If
      Next j
   Next i
End Sub

1 Ответ

0 голосов
/ 12 июня 2018

Вот как я это сделаю, но на основе вашего существующего метода:

Sub Sort_Active_Book()
Dim i As Integer
Dim j As Integer
Dim iAnswer As VbMsgBoxResult

Dim sht1 As Worksheet
Dim sht2 As Worksheet

With ActiveWorkbook

'
'
   iAnswer = MsgBox("Sort Sheets in Ascending Order?" & Chr(10) _
     & "Clicking No will sort in Descending Order", _
     vbYesNoCancel + vbQuestion + vbDefaultButton1, "Sort Worksheets")

   For i = 1 To .Sheets.Count
      For j = 1 To .Sheets.Count - 1

        Set sht1 = .Sheets(j)
        Set sht2 = .Sheets(j + 1)

        '
        ' If the answer is Yes, then sort in ascending order.
        '
         If iAnswer = vbYes Then
            If UCase$(sht1.Name) > UCase$(sht2.Name) Then
               sht1.Move After:=sht2
            End If
        '
        ' If the answer is No, then sort in descending order.
        '
         ElseIf iAnswer = vbNo Then
            If UCase$(sht1.Name) < UCase$(sht2.Name) Then
               sht1.Move After:=sht2
            End If
         End If
      Next j
   Next i

End With

End Sub

Из комментариев: были другие листы, которые были скрыты с помощью xlSheetVeryHidden, отсюда и начальная ошибка времени выполненияв вопросе.

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