macros在Excel表中对列进行sorting

我想重新排列几个表中的所有列(在Excel中设置为Table),在同一个Worksheet中的另一个下面。

这是一个例子,所以你可以更好地理解我现在拥有的东西:

表格1

Col1 Col2 Col3 Col4 Col5 Data Data Data Data Data 

表2

 Col1 Col4 Col5 Col3 Col2 Data Data Data Data Data 

表3(在这张表中,我有一个额外的列,我不需要)

 Col3 Col1 Col2 Col5 Col4 Col6 Data Data Data Data Data Data 

期望的结果

 Col1 Col2 Col3 Col4 Col5 Data Data Data Data Data Data Data Data Data Data Data Data Data Data Data 

我的第一个解决scheme是在Excel中创build一个macros,但我与代码堆积,因为我不是专家。 这个想法是创build一个数组,并为每个表sorting。

 Dim tbl As ListObject Dim WS As Worksheet Dim arrColOrder As Variant, ndx As Integer arrColOrder = Array("Col1", "Col2", "Col3", "Col4", "Col5") For ndx = LBound(arrColOrder) To UBound(arrColOrder) For Each WS In Worksheets For Each tbl In WS.ListObjects 

这是代码的开始,但我真的不知道如何定义每个表的数组。

考虑到Table2Sheet1Sheet2中是同一个工作簿中的空白工作表,下面是将列从左到右排列的代码:(必须在调用pSortLeftToRight子例程时传递表名)

Sub MainCode()

 'Call Sort Left to Right routine Call pSortLeftToRight("Table2") 'Need to pass Table Name here 

结束小组

Sub pSortLeftToRight(strTableName As String)

 Dim tblSource As ListObject Dim varTempData As Variant Dim rngDataRange As Range 'Assign Table data to variant varTempData = Sheet1.ListObjects(strTableName).Range With Sheet2.Range("A1").CurrentRegion .Clear .Resize(UBound(varTempData, 2), UBound(varTempData, 1)) = Application.Transpose(varTempData) Set rngDataRange = Sheet2.Range("A1").CurrentRegion rngDataRange.Sort key1:=rngDataRange.Columns(1), order1:=xlAscending, Header:=xlNo End With varTempData = Empty varTempData = Application.Transpose(rngDataRange) Set rngDataRange = Sheet1.ListObjects(strTableName).Range Sheet1.ListObjects("Table2").Range = varTempData Sheet1.ListObjects.Add(xlSrcRange, rngDataRange, , xlYes).Name = strTableName Set rngDataRange = Nothing 

结束小组