在多个Excel工作表上对动态范围进行排序

时间:2018-04-19 18:25:56

标签: excel vba excel-vba sorting

当我运行我的宏时,它会对一个标签或另一个标签进行排序,而不是两个标签。

我有一个工作簿,我从其他两个其他工作簿中导入数据,这些工作簿是从报表中自动生成的。我从报告生成的工作表中复制整个工作表并将其粘贴到"导入"工作表,我这两个报告都这样做。我想从Imprt工作表中获取信息,并仅从我需要的信息中提取。

我正在使用宏来提取具有所需信息的列,因为列始终是静态的。例如:

    Dim sourceColumn As Range, targetColumn As Range, Tracker As Workbook

    Set sourceColumn = Workbooks("Book1.xlsm").Worksheets("Import1").Columns("AZ")
    Set targetColumn = Workbooks("Book1.xlsm").Worksheets("Macro1").Columns("A")

    sourceColumn.Copy Destination:=targetColumn

我重复此代码片段,直到我从Macro1中的Import1获取所有信息,以及从Import2到Macro2的所有信息,以及所有正确顺序的信息(名称优先,然后从那里获取其他信息) 。这很完美。

接下来,我想对每个宏工作表进行排序,以便按字母顺序按列A中的名称对所有信息进行排序。由于范围并不总是相同的长度我使用以下代码来设置动态范围,帐户的标题,按列A中的名称排序。从来没有需要计算的空白列或行被拉

Dim sheet1 As Worksheet, StartCell1 As Range, Selection1 As Range
Dim sheet2 As Worksheet, StartCell2 As Range, Selection2 As Range

Set sheet1 = Workbooks("Book1.xlsm").Worksheets("Macro1")
Set StartCell1 = Range("A1")

Set Selection1 = StartCell1.CurrentRegion
Selection1.Select

Selection1.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes, Orientation:=xlSortColumns

Set sheet2 = Workbooks("Book1.xlsm").Worksheets("Macro2")
Set StartCell2 = Range("A1")

Set Selection2 = StartCell2.CurrentRegion
Selection2.Select

Selection2.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes, Orientation:=xlSortColumns

这总是按预期拉取并填充两个宏表。我遇到的问题是,当我运行宏一次时,它按名称排序第一个选项卡,而不是第二个选项卡。然后当我再次运行宏时,它会解开第一个选项卡并对第二个选项卡进行排序。

我计划将这两个Macro选项卡中的数据拉入一个主工作表,该工作表将呈现给我的最终用户,并运行CountIf和各种其他自动计算,以显示根据这些报告从这些报告中提取的有意义的信息。我需要两个宏工作表按名称排序并保持排序,以便我可以自动化这些分析。

如何让这个宏对第一个标签进行排序,然后它们会移动到第二个标签并对其进行排序?

1 个答案:

答案 0 :(得分:1)

尝试

Option Explicit

Sub test()

    Dim sheet1 As Worksheet, StartCell1 As Range, Selection1 As Range
    Dim sheet2 As Worksheet, StartCell2 As Range, Selection2 As Range

    Set sheet1 = Workbooks("Book1.xlsb").Worksheets("Macro1")
    Set StartCell1 = sheet1.Range("A1")

    Set Selection1 = StartCell1.CurrentRegion

    Selection1.Sort Key1:=StartCell1, Order1:=xlAscending, Header:=xlYes, Orientation:=xlSortColumns

    Set sheet2 = Workbooks("Book1.xlsb").Worksheets("Macro2")
    Set StartCell2 = sheet2.Range("A1")

    Set Selection2 = StartCell2.CurrentRegion


    Selection2.Sort Key1:=StartCell2, Order1:=xlAscending, Header:=xlYes, Orientation:=xlSortColumns

End Sub