宏对Excel表格中的列进行排序
我想对多个表(在Excel中设置为Table)中的所有列重新排序,一个位于同一工作表中另一个地址的下方 这是一个示例,您可以更好地了解我目前的情况: 表1宏对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
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