【发布时间】:2016-09-15 18:34:29
【问题描述】:
以下代码行将分配一个数组作为一维sortedArr = WorksheetFunction.Transpose(lstIssues1.List)。这行代码将数组分配为二维arrIssues = Table.ListColumns(Table.ListColumns(strNumber).Range.column).DataBodyRange
对于上面的每一行,我称之为冒泡排序函数。但它在一个或另一个错误取决于我是否放了
If Arr(i) > Arr(j) Then ...
或者
If Arr(i, 1) > Arr(j, 1) Then ...
我可以循环填充arrIssues。但我想知道是否可以将其填充为一维数组而无需循环。
更新
这是我遇到问题的代码
Private Sub cmdRemove_Click()
Dim SortedArr() As Variant
With lstPrevious
If .ListIndex = -1 Then Exit Sub
For i = .ListCount - 1 To 0 Step -1
If .Selected(i) = True Then
lstAdditional.AddItem .List(i)
.RemoveItem (i)
End If
Next i
End With
ReDim SortedArr(lstAdditional.ListCount - 1)
SortedArr = Application.Transpose(lstAdditional.List) 'ERROR Type Mismatch
Call BubbleSort(SortedArr)
Me.lstAdditional.List = SortedArr
txtFocus.SetFocus
End Sub
Public Sub BubbleSort(Arr)
Dim strTemp As String
Dim lngMin As Long
Dim lngMax As Long
lngMin = LBound(Arr)
lngMax = UBound(Arr)
For i = lngMin To lngMax
For j = i + 1 To lngMax
If Arr(i) > Arr(j) Then
strTemp = Arr(i)
Arr(i) = Arr(j)
Arr(j) = strTemp
End If
Next j
Next i
End Sub
奇怪的是,我在另一个用户窗体中使用了相同的逻辑并且它可以工作。抱歉,不清楚。
【问题讨论】:
-
也许这就是您要找的东西? VBA (Excel) Initialize Entire Array without Looping
-
谢谢,但我需要从一个范围内输入不同的值。只是想在没有循环的情况下做到这一点。但我可能最终会循环。
-
循环不是坏事 ;-)
-
两种可能的解决方案,如果我理解正确的话。
1:转置二维数组(如果数组不大于转置的上限,具体取决于您的 Excel 版本)。或2:检查数组中有多少维,然后应用适当的排序公式。 -
人们有什么反对突然循环的?输入
For foo = 1 to bar真的比在 SO 上写一个问题需要更长的时间吗?