如何解决如何对工作表数组进行排序 vba
我有和 Excel
有很多 sheets(>100)
。每个 sheet(Rs)
在同一个 PartNr(integer)
上都有一个 Rs.Range("F8")
。
我需要的是按 PartNr 排序的 Array(arrRs)
Rs。所以最后我可以做一个:For each Rs in arrRs 'some logic Next Rs
但是当我处理一系列工作表时,我不知道如何对它们进行排序。
相反,我做了 (1)。 partNrs 数组 (2). 对数组进行排序 (3). 使用 Sheets 索引重新写入数组。但我觉得即使工作效率也不高,有些东西告诉我这可能是一种更好的优化方式。希望大家能帮帮我
'->Step 1. Initialize Variables
Rs_PartNrPos = "F8" ' which range to read the PartNr
wsCount = Worksheets.count
RsCount = wsCount - 1
i_Rs = 0
'->Step 2. Initialize Array
ReDim arrRs(2 To wsCount) As Variant
'->Step 3. store all Rs's partNr into arrRs
For Each Rs In Worksheets
If Rs.Name = "Report-sum" Then
'Do nothing on main report
Else
i_Rs = i_Rs + 1 ' increment Rs count
If Not IsNumeric(Rs.Range(Rs_PartNrPos)) Then
MsgBox "The part Nr: " & Rs.Range(Rs_PartNrPos) & " " & vbCrLf & "From sheet: " & Rs.Name & "" & vbCrLf & "Is not a correct number." & vbCrLf & "Please fix before importing.",vbExclamation
Exit Sub
End If
arrRs(Rs.index) = Rs.Range(Rs_PartNrPos)
End If
Next Rs
'->Step 4. Order arrRs,minPartNr to maxPartNr
Call QuickSort(arrRs,2,UBound(arrRs))
'->Step 5. Re-Write ordered array with Rs Sheets indexes
For i = LBound(arrRs) To UBound(arrRs)
PartNr = arrRs(i)
For Each Rss In Worksheets
If Rss.Range(Rs_PartNrPos) = PartNr Then
arrRs(i) = Rss.index 'update arrRs Pos to Rs sheet index
End If
Next Rss
Next i
' Working! but...efficiently?
For Each i In arrRs
Debug.Print i,Worksheets(i).Name
Next i
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。