【发布时间】:2015-01-14 16:53:11
【问题描述】:
我一直在努力(以及其他一些 Excel 编程网站上的其他人)在 Userform 中获得一个 Combobox,以便按 alpha 顺序对行(来自源电子表格中的两列)进行排序。
理想情况下,我想要一个二维排序,但在这一点上,我会满足于一个可行的。
目前,当下拉组合框时,会读取部分内容(减去不显示且不需要的项目符号):
- 放大 MRKPayoutPlan
- 查克 PSERSFuture
- 查克 PSERS 当前
我想要的是:
- 查克 PSERS 当前
- 查克 PSERSFuture
- 放大 MRKPayoutPlan
第一个顺序源自行在源工作表中出现的顺序。
此时,我收到运行时错误“13”,类型不匹配错误。两个字段都是文本字段(一个是姓氏,另一个是分类代码-我想先按名称排序)。
以下是 VBA 代码的两个相关部分。如果有人能帮我解决这个问题,我会至少买一轮虚拟啤酒。 Excel VBA 不是我最舒服的领域——我可以在其他应用程序中完成此操作,但客户端规范是这一切都必须单独在 Excel 中运行。提前致谢。
Private Sub UserForm_Initialize()
fPath = ThisWorkbook.Path & "\"
currentRow = 4
sheetName = Sheet5.Name
lastRow = Sheets(sheetName).Range("C" & Rows.Count).End(xlUp).Row
Dim rngUID As Range
Dim vList
Set rngUID = Range("vUID")
With rngUID
vList = Application.Index(.Cells, .Parent.Evaluate("ROW(" & .Address & ")"), Array(7, 1))
End With
vList = BubbleSort2D(vList, 2, 1)
With ComboBox1
.ColumnCount = 2
.ColumnWidths = "100;100"
.List = vList
End With
PopulateControls
End Sub
Public Function BubbleSort2D(Strings, ParamArray SortColumns())
Dim tempItem
Dim a As Long
Dim e As Long
Dim f As Long
Dim g As Long
Dim i As String
Dim j As String
Dim m() As String
Dim n
Dim x As Long
Dim y As Long
Dim lngColumn As Long
e = 1
n = Strings
Do While e <> -1
For a = LBound(Strings) To UBound(Strings) - 1
For y = LBound(SortColumns) To UBound(SortColumns)
lngColumn = SortColumns(y)
i = n(a, lngColumn)
j = n(a + 1, lngColumn)
f = StrComp(i, j)
If f < 0 Then
Exit For
ElseIf f > 0 Then
For x = LBound(Strings, 2) To UBound(Strings, 2)
tempItem = n(a, x)
n(a, x) = n(a + 1, x)
n(a + 1, x) = tempItem
Next x
g = 1
Exit For
End If
Next y
Next a
If g = 1 Then
e = 1
Else
e = -1
End If
g = 0
Loop
BubbleSort2D = n
End Function
【问题讨论】:
-
第二维应该如何排序?所有数据都会保留在它的子向量中吗?
-
姓氏然后分类(例如 Smith A101、Smith A201、Thompson C100)。尽管由于一个名称最多只能有 4-5 个分类,因此只需对名称进行排序即可 - 只是试图将所有松散的末端捆绑起来,因为 Combobox 需要显示这两个字段。当我使用 UNsorted 数组填充时,一切正常,但大约有 2000 行,这无法满足我们的需要。
-
您能否编辑您的问题以提供未排序二维数组和已排序二维数组的示例?只是一个 3x3 的小方块?
-
问题已相应编辑。如前所述,Combobox 已经按照行在工作表中出现的顺序显示了数组。
标签: excel vba multidimensional-array bubble-sort