【发布时间】:2021-07-23 06:23:03
【问题描述】:
我有一个导出“NewExport”,它总是随机化我收到的数据列。我需要这些列与“TheOrder”中的列顺序对齐,因此此代码将有助于重新组织导出以与我已经构建的列标题对齐。
我有 132 列需要重新对齐,虽然我可以全部输入,但必须有一种更简单的方法来对齐我已经创建的列标题。需要注意的是,下面的代码是从另一个 StackOverflow 答案中无耻地复制/粘贴的。
Sub OrderColumns(ByVal NewExport As Workbook, ByVal TheOrder As Worksheet)
Dim correctOrder() As Variant
Dim lastCol As Long
Dim headerRng As Range, cel As Range
Dim mainWS As Worksheet
Set mainWS = NewExport.Worksheets("Sheet1")
'Need to figure out how to make this an array based on a Range
correctOrder() = Array(TheOrder.Range("A1:A132").Value)
With mainWS
lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
Set headerRng = .Range(.Cells(1, 1), .Cells(1, lastCol))
End With
Dim newWS As Worksheet
Set newWS = Ninja.Sheets.Add
newWS.Name = "Rearranged Sheet"
Dim col As Long
With newWS
For col = 1 To lastCol
For Each cel In headerRng
If cel.Value = correctOrder(col - 1) Then
mainWS.Columns(cel.Column).Copy .Columns(col)
Exit For
End If
Next cel
Next col
End With
End Sub
【问题讨论】:
-
这能回答你的问题吗? Creating an Array from a Range in VBA
-
很遗憾,该解决方案对我不起作用。
-
这是为什么呢?它看起来版本相似。
-
我最好的猜测是它不使用 Array() 函数?我不知道。我能够找到答案,只是它不像该解决方案提供的那样自动化。