the*_*nes 6 sorting excel vba combobox excel-vba
我一直在考虑如何在组合框中对值进行排序.
我在初始化表单时向ComboBox添加项目,因为值的数量在工作表上不断增加.
我使用下一个代码来添加项目:
With ComboBox1
lastcell = ThisWorkbook.Sheets("1").Range("F1000000").End(xlUp).Row + 1
For i = 2 To lastcell 
.AddItem ThisWorkbook.Sheets("1").Cells(i, 6)
Next i
End With
我想将我要添加到ComoBox上的值复制到另一张表并在新表中对它们进行排序,它工作正常但它似乎不是一个聪明的选项,这意味着我创建了另一张表然后复制值并对其进行排序,而不是直接对它们进行排序.
我的问题是,任何人都知道如何直接从原始表格中做到这一点?我不知道任何API,所以,请,只有VBA代码.我alredy检查MSDN但我无法弄清楚如何使其工作.
谢谢,如果需要更多信息,请告诉我.
PS:我无法直接从原始工作表中对它们进行排序,因为此工作表必须具有静态顺序
您可以将工作表中的值读取到数组中,使用代码对其进行排序,然后添加项目。
此代码将使用快速排序来执行此操作:
Private Sub UserForm_Initialize()
    Dim varRange() As Variant
    Dim lngLastRow As Long
    Dim i As Long
    lngLastRow = Range("F:F").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    varRange = Range("F:F").Resize(lngLastRow).Cells
    subQuickSort varRange
    Me.ComboBox1.List = varRange
End Sub
Public Sub subQuickSort(var1 As Variant, _
    Optional ByVal lngLowStart As Long = -1, _
    Optional ByVal lngHighStart As Long = -1)
    Dim varPivot As Variant
    Dim lngLow As Long
    Dim lngHigh As Long
    lngLowStart = IIf(lngLowStart = -1, LBound(var1), lngLowStart)
    lngHighStart = IIf(lngHighStart = -1, UBound(var1), lngHighStart)
    lngLow = lngLowStart
    lngHigh = lngHighStart
    varPivot = var1((lngLowStart + lngHighStart) \ 2, 1)
    While (lngLow <= lngHigh)
        While (var1(lngLow, 1) < varPivot And lngLow < lngHighStart)
            lngLow = lngLow + 1
        Wend
        While (varPivot < var1(lngHigh, 1) And lngHigh > lngLowStart)
            lngHigh = lngHigh - 1
        Wend
        If (lngLow <= lngHigh) Then
            subSwap var1, lngLow, lngHigh
            lngLow = lngLow + 1
            lngHigh = lngHigh - 1
        End If
    Wend
    If (lngLowStart < lngHigh) Then
        subQuickSort var1, lngLowStart, lngHigh
    End If
    If (lngLow < lngHighStart) Then
        subQuickSort var1, lngLow, lngHighStart
    End If
End Sub
Private Sub subSwap(var As Variant, lngItem1 As Long, lngItem2 As Long)
    Dim varTemp As Variant
    varTemp = var(lngItem1, 1)
    var(lngItem1, 1) = var(lngItem2, 1)
    var(lngItem2, 1) = varTemp
End Sub
| 归档时间: | 
 | 
| 查看次数: | 13086 次 | 
| 最近记录: |