Vba 对工作簿中的特定工作表进行排序

Vba 对工作簿中的特定工作表进行排序,vba,excel,sorting,Vba,Excel,Sorting,我已经写了一个代码,它将我所有的工作表按升序和降序排序。现在,请建议我应该如何修改代码,以便它只对我选择的几个特定表进行排序。 例如,如果我在总共10张纸中选择了第2张、第5张和第7张,那么它应该只按照升序和降序对这3张纸进行排序 Sub Sort_Active_Book() Dim i As Integer Dim j As Integer Dim iAnswer As VbMsgBoxResult ' ' Prompt the user as which direction they wis

我已经写了一个代码,它将我所有的工作表按升序和降序排序。现在,请建议我应该如何修改代码,以便它只对我选择的几个特定表进行排序。 例如,如果我在总共10张纸中选择了第2张、第5张和第7张,那么它应该只按照升序和降序对这3张纸进行排序

Sub Sort_Active_Book()
Dim i As Integer
Dim j As Integer
Dim iAnswer As VbMsgBoxResult
'
' Prompt the user as which direction they wish to
' sort the worksheets.
'
   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)
我还为上述功能创建了一个Userform,请查找以下内容:

Private Sub CommandButton1_Click()

Dim i As Integer
Dim j As Integer
Dim x As Long
Dim y As Long
Dim k As Long
Dim u As Long
Dim a As Long
Dim b As Long

If Me.OptionButton1 = True Then
' Prompt the user as which direction they wish to
' sort the worksheets.
   For i = 1 To Sheets.Count
   For j = 1 To Sheets.Count - 1
'
' sort in ascending order.
'
         If Me.OptionButton3 = True Then
            If UCase$(Sheets(j).Name) > UCase$(Sheets(j + 1).Name) Then
               Sheets(j).Move After:=Sheets(j + 1)
            End If
'
' sort in descending order.
'
         ElseIf Me.OptionButton4 = True 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


ElseIf Me.OptionButton2 = True Then

For i = 1 To Me.ListBox1.ListCount
For j = 1 To Me.ListBox1.ListCount - 1
   If Me.ListBox1.Selected(j) = True Then
' sort in ascending order.
         If Me.OptionButton3 = True Then
            If UCase$(Sheets(j).Name) > UCase$(Sheets(j + 1).Name) Then
               Sheets(j).Move After:=Sheets(j + 1)
            End If
 ' sort in descending order.
         ElseIf Me.OptionButton4 = True Then
            If UCase$(Sheets(j).Name) < UCase$(Sheets(j + 1).Name) Then
               Sheets(j).Move After:=Sheets(j + 1)
            End If
         End If
        End If
      Next
   Next
End If


End Sub

Private Sub UserForm_Initialize()
Dim Sh As Variant
'for each loop the add visible sheets
For Each Sh In ActiveWorkbook.Sheets
If Sh.Visible = True Then
'add sheets to the listbox

Me.ListBox1.AddItem Sh.Name
End If
Next Sh

Me.OptionButton1 = True

End Sub
Private子命令按钮1\u单击()
作为整数的Dim i
作为整数的Dim j
暗x等长
长得一样暗
暗k一样长
把你的头发调暗
暗淡如长
暗b一样长
如果Me.OptionButton1=真,则
'提示用户他们希望选择的方向
'对工作表进行排序。
对于i=1到1张。计数
对于j=1的板材,计数为-1
'
'按升序排序。
'
如果Me.OptionButton3=真,则
如果UCase$(Sheets(j).Name)>UCase$(Sheets(j+1).Name),那么
板材(j)。在以下位置移动:=板材(j+1)
如果结束
'
'按降序排序。
'
ElseIf Me.OptionButton4=则为真
如果UCase$(Sheets(j).Name)UCase$(Sheets(j+1).Name),那么
板材(j)。在以下位置移动:=板材(j+1)
如果结束
'按降序排序。
ElseIf Me.OptionButton4=则为真
如果UCase$(Sheets(j).Name)
关于代码,一个简单的方法是在循环所有工作表时检查工作表是否被选中。

我会选择这样的方法。但我没有测试过:

    Dim ss()
    counter = 1
    For Each x In ThisWorkbook.Windows(1).SelectedSheets
        ReDim ss(1 To counter)
        ss(counter) = x.Name
        counter = counter + 1
    Next



    for i = 1 to ubound(ss)
        for j = 1 to ubound(ss) - 1

        ...
        ...
        ...

        next j 
    next i

在您的代码中,而不是在工作表(j)中。名称写ss(j),而在工作表(j)上写TishWorkbook.Sheets(ss(j))

如何选择工作表?通过单击或您想在某处输入信息?我有一个userform,因此在列表框中选择该表,您可以使用listitem[I]属性。如果选中,则继续,如果未选中,则不执行任何操作。此处Optionbutton1用于选择所有工作表,Optionbutton2用于仅使用选定的工作表,Optionbutton2用于升序,optionbutton4用于降序。在我的代码中,当Optionbutton1为真时,所有工作都正常,即根据Optionbutton3(升序)或Optionbutton4(降序)顺序对所有工作表进行排序。我应该如何将其与我链接。listbox1