Excel 工作表类的移动方法失败
我试图使用下面在线找到的编码在工作簿中排列选项卡,但是,在排列工作簿中的一些工作表后,出现以下错误“运行时错误'1004';工作表类的移动方法失败。我已经对宏进行了几次检查,它似乎工作得很好,直到它遇到一个尚未重命名的工作表。这时错误就出现了。这一行出现在Excel 工作表类的移动方法失败,excel,vba,Excel,Vba,我试图使用下面在线找到的编码在工作簿中排列选项卡,但是,在排列工作簿中的一些工作表后,出现以下错误“运行时错误'1004';工作表类的移动方法失败。我已经对宏进行了几次检查,它似乎工作得很好,直到它遇到一个尚未重命名的工作表。这时错误就出现了。这一行出现在工作表(j)上。移动到:=工作表(j+1) 编码如下: Sub Sort_Active_Book() Dim i As Integer Dim j As Integer Dim iAnswer As VbMsgBoxResult ' '
工作表(j)上。移动到:=工作表(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
Sub-Sort\u Active\u Book()
作为整数的Dim i
作为整数的Dim j
Dim iAnswer作为VbMsgBoxResult
'
'
iAnswer=MsgBox(“按升序排序工作表?”&Chr(10)_
&“单击“否”将按降序排序”_
vbYesNoCancel+vbQuestion+vbDefaultButton1,“对工作表排序”)
对于i=1到1张。计数
对于j=1的板材,计数为-1
'
'如果答案是肯定的,则按升序排序。
'
如果iAnswer=vbYes,则
如果UCase$(Sheets(j).Name)>UCase$(Sheets(j+1).Name),那么
板材(j)。在以下位置移动:=板材(j+1)
如果结束
'
'如果答案是否,则按降序排序。
'
ElseIf iAnswer=vbNo然后
如果UCase$(Sheets(j).Name)
我会这样做,但基于您现有的方法:
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
Sub-Sort\u Active\u Book()
作为整数的Dim i
作为整数的Dim j
Dim iAnswer作为VbMsgBoxResult
Dim sht1作为工作表
将sht2变暗为工作表
使用ActiveWorkbook
'
'
iAnswer=MsgBox(“按升序排序工作表?”&Chr(10)_
&“单击“否”将按降序排序”_
vbYesNoCancel+vbQuestion+vbDefaultButton1,“对工作表排序”)
对于i=1到.Sheets.Count
对于j=1到.Sheets.Count-1
设置sht1=.张(j)
设置sht2=.张(j+1)
'
'如果答案是肯定的,则按升序排序。
'
如果iAnswer=vbYes,则
如果UCase$(sht1.Name)>UCase$(sht2.Name),那么
sht1.在以下位置移动:=sht2
如果结束
'
'如果答案是否,则按降序排序。
'
ElseIf iAnswer=vbNo然后
如果UCase$(sht1.Name)
注释:有其他工作表使用
xlSheetVeryHidden
隐藏,因此问题中出现了初始运行时错误。您将此代码放在哪里?您需要添加新模块并放入代码。它使用完全限定的引用进行计量:thishworkbook.Sheets(j)。移到:=Sheets(j+1)
。如果同时打开多个工作簿,则可能会发生这种错误。简言之,将此工作簿
放在代码中所有工作表
对象的前面。感谢CLR的出色工作。你的编码帮助我找到了最初的问题。。。还有其他使用xlSheetVeryHidden隐藏的工作表,因此出现了最初的运行时错误。@BaberBeg我已将您的评论编辑为后代的答案。您找到的实际根本原因对调试非常有帮助。