vbox userform中按日期时间对列表框进行排序/过滤?

问题描述 投票:0回答:1

我有一个带有列表框的用户窗体,用于显示工作表中的数据。我想让该数据按当前日期和时间显示在列表框中。因此,当用户输入新数据时,他/她会看到最新的数据行。这是为了帮助用户,避免他们输入重复的信息。

我希望可以以编程方式完成此操作,因为在不久的将来,此表单将链接到数据库而不是工作表。

这是填充我的列表框的代码:

    Private Sub UserForm_Initialize() 'Sets variables when the userform initializes

    Call MakeFormResizeable(Me)

    Me.tbDate.Value = Format(Now(), "mm/dd/yyyy hh:mm")

     With ListBox1
        .RowSource = "Table1!A3:T100"
        .ColumnCount = 20
        .ColumnHeads = True
    End With
   End Sub

以及通过调用“ RefreshListbox”单击保存按钮时重新加载我的列表框的代码:

   Private Sub RefreshListbox()
       With ListBox1
         .RowSource = "Table1!A3:T100"
         .ColumnCount = 20
         .ColumnHeads = True
      End With
   End Sub

我的用户界面的屏幕截图:UserForm Screen Shot

excel vba listbox userform
1个回答
0
投票

参考Date Array SortPopulating listbox from array

在模块中公开声明数组变量Public Dtarr(1 To 8) As Date您可以在宏中重新调整数组大小,以将其大小调整为表大小。

以下是日期表enter image description here

[在模块中添加了以下过程以对日期数组进行排序。

Sub SortAr(arr() As Date)
    Dim Temp As Date
    Dim i As Long, j As Long

    For j = 2 To UBound(arr)
        Temp = arr(j)
        For i = j - 1 To 1 Step -1
            If (arr(i) >= Temp) Then GoTo 10
' ">" sorts in descending order.
' "<" sorts in ascending order.
                arr(i + 1) = arr(i)
        Next i
        i = 0
10:         arr(i + 1) = Temp
    Next j
End Sub

向用户表单添加了以下步骤

Private Sub UserForm_Initialize()
Dim Sh As Worksheet
Set Sh = ThisWorkbook.Worksheets("Sheet2")

For i = 1 To 8
Dtarr(i) = Sh.Range("A" & i + 3).Value
Next

SortAr Dtarr
ListBox1.List = Dtarr

End Sub

因此,输出是降序排序的列表框。用户始终可以在顶部看到最新的记录时间。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.