【问题标题】:Search for a date as you type in a text box>Active X Controls在文本框中键入时搜索日期>Active X 控件
【发布时间】:2021-08-22 16:03:34
【问题描述】:

我是 vba 编码的新手。

我正在尝试制作一个在您键入时搜索日期的文本框。例如,如果我有一个包含许多日期的表格,当我输入“2015”时,我希望它显示所有包含 2015 年数据的日​​期。或者如果我输入 04/2015,则显示 2015 年 4 月的所有数据

我尝试了许多过滤您键入的代码,但似乎它们不适用于日期。

注意:如果这太难编码,那么对我来说,另一种选择是在工作表中指定两个单元格,这样如果我在这些单元格中写两个日期,它将过滤并显示这两个日期之间的数据.

谢谢:)

My WorkSheet

代码

Private Sub TextBox1_Change()

    Dim filterInput As Range
    Dim filterRange As Range
    
    Set filterInput = Range("D5")
    Set filterRange = Range("I10:I39")
    
    filterRange.AutoFilter Field:=1, Criteria:="*" & filterInput & "*", _
                           VisibleDropDown:=False

End Sub

【问题讨论】:

  • "我尝试了很多代码" - 您尝试了哪些具体代码(也许选择一个并发布您的版本)以及 具体您在尝试使用它时遇到过问题吗?这里没有代码的问题往往会因为“太宽泛”或“需要调试细节”而被关闭。如果您展示您的尝试,人们更有可能帮助您。
  • 我查看了一个 youtube 频道做我正在寻找的东西,但是当我尝试它时它不起作用。我已经在我原来的帖子中添加了代码

标签: excel vba date


【解决方案1】:

这可能会让你开始:

Private Sub TextBox1_Change()
    Dim filterInput As Range
    Dim filterRange As Range, vFilt
    
    Set filterRange = Me.Range("D9:D37")
    vFilt = Trim(Me.Range("D5").Value) 'TextBox1 is linked to D5
    Debug.Print vFilt
    
    If vFilt Like "##" Then vFilt = "20" & vFilt
    
    If vFilt Like "20##" Then
        'filter year only
        filterRange.AutoFilter Field:=1, _
                Operator:=xlFilterValues, _
                Criteria2:=Array(0, "12/31/" & vFilt)
    ElseIf vFilt Like "#/####" Or vFilt Like "##/####" Or _
           vFilt Like "#/##" Or vFilt Like "##/##" Then
        'filter month/year
        filterRange.AutoFilter Field:=1, _
                Operator:=xlFilterValues, _
                Criteria2:=Array(1, LastDayOfMonth(vFilt))
    Else
        On Error Resume Next
        filterRange.Parent.ShowAllData
    End If
End Sub

Function LastDayOfMonth(v)
    Dim arr
    arr = Split(v, "/")
    If arr(1) Like "##" Then arr(1) = "20" & arr(1)
    LastDayOfMonth = Application.EoMonth(DateSerial(arr(1), arr(0), 1), 0)
    LastDayOfMonth = Format(LastDayOfMonth, "mm/dd/yyyy")
End Function

过滤日期:https://www.excelcampus.com/vba/filter-dates/

【讨论】:

  • 非常感谢。你太棒了。我希望你枕头的两边都是冷的:)
  • 很高兴听到它正在工作。我也学到了一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 2012-01-16
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
相关资源
最近更新 更多