基于Excel电子表格中输入的订单

时间:2018-07-03 13:43:48

标签: excel excel-vba vba

在Excel电子表格中,用户可以在列A 中定义工作表的顺序:

       A        B
1   Sheet3
2   Sheet4
3   Sheet1
4   Sheet2
5

一旦用户在 A列中输入了订单,他/她就可以单击链接到此VBA代码的按钮:

Sub Move()
Sheets(Sheet1.Range("A2").Value).Move After:=Sheets(Sheet1.Range("A1").Value)
Sheets(Sheet1.Range("A3").Value).Move After:=Sheets(Sheet1.Range("A2").Value)
Sheets(Sheet1.Range("A4").Value).Move After:=Sheets(Sheet1.Range("A3").Value)
End Sub

此VBA根据用户在 A列中的输入,将图纸按顺序排列。到目前为止,所有这些都工作正常


现在,我遇到的问题是,张数会有所不同,因此可能会出现8张或10张或15张,而不仅仅是4张。在这种情况下,有必要将所有这些工作表手动添加到VBA代码中。

是否可以使VBA代码更加动态。类似于 A列中的值的数组和类似这样的VBA:

Sub Move()
MoveSheets based on Array {Sheet1.Range("A1:A5")}
End Sub

1 个答案:

答案 0 :(得分:1)

如果您的工作表名称位于B4中的“ Sheet1”上,我认为这会起作用。

Sub x()

Dim n As Long, i As Long, r As Range

Application.ScreenUpdating = False

With Sheets("Sheet1")
    Set r = .Range("B4", .Range("B" & Rows.Count).End(xlUp))
    For n = r.Count To 1 Step -1
        Sheets(r.Cells(n).Value).Move after:=Sheets(Sheets.Count - i)
        i = i + 1
    Next n
    Application.Goto .Range("A1")
End With

Application.ScreenUpdating = True

End Sub