宏对Excel表格中的列进行排序

宏对Excel表格中的列进行排序,excel,ms-access,vba,Excel,Ms Access,Vba,我想对多个表(在Excel中设置为Table)中的所有列重新排序,一个位于同一工作表中另一个地址的下方 这是一个示例,您可以更好地了解我目前的情况: 表1 Col1 Col2 Col3 Col4 Col5 Data Data Data Data Data 表2 Col1 Col4 Col5 Col3 Col2 Data Data Data Data Data 表3(在此表中,我有一个不需要的额外列) 期望结果 Col1 Col2 Col3 Col4 C

我想对多个表(在Excel中设置为Table)中的所有列重新排序,一个位于同一工作表中另一个地址的下方

这是一个示例,您可以更好地了解我目前的情况:

表1

Col1  Col2  Col3  Col4  Col5
Data  Data  Data  Data  Data
表2

Col1  Col4  Col5  Col3  Col2
Data  Data  Data  Data  Data
表3(在此表中,我有一个不需要的额外列)

期望结果

Col1  Col2  Col3  Col4  Col5
Data  Data  Data  Data  Data
Data  Data  Data  Data  Data
Data  Data  Data  Data  Data
我的第一个解决方案是在Excel中创建一个宏,但由于我不是专家,我的代码太多了。其思想是创建一个数组并对每个表的列进行排序

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

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

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

子主代码()

端接头

子pSortLeftToRight(strTableName作为字符串)

端接头

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
'Call Sort Left to Right routine
Call pSortLeftToRight("Table2") 'Need to pass Table Name here
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