处理Search/Filter用户窗体,并且在尝试过滤日期时遇到问题。Excel VBA按日期排序
当我比较一个日期以确定它是否包含一个字符串时,它似乎工作得很好(我相信我在比较过程中将它转换为字符串,fwiw)。当它需要按日期列进行筛选时,它不会识别包含给定字符串的行并从工作表中删除所有内容。
实施例:
过滤字符串:6/
Date entries: 6/15/1956
4/3/1971
10/13/1960
2/16/1983
我想要显示线1和4中,因为它们含有(默认情况下,通配符(*)被放置在每一侧上)“ 6 /“
我意识到date对象实际上是一个排序数组;这就是为什么我有问题吗?我能用普通的自动过滤器不能做到我想要的吗?按日期列排序时,是否需要制作特殊情况?是否适用于其他数据类型(金钱,时间等)?
感谢
参考过滤代码(如果变量没有声明,它们是全球或垃圾变量)
Private Sub Filter_CommandButton_Click()
'Filters by a text input and a column to filter
Dim isInCol As Boolean
Dim sortKey As String
Dim sortOrder As XlSortOrder
Dim currentData As Range
Dim sortField As Integer ' This is the offset, determined by list index
If filterColumn Is Nothing Then
gojira = MsgBox("You need to enter a column to filter", vbOKOnly)
Exit Sub
End If
' setting active sheet complete data
Set currentData = ActiveSheet.UsedRange
' make sort key a wildcard
If include = True Then
sortKey = "*" & filterText & "*"
Else ' for excluding the entered text
sortKey = "<>" & "*" & filterText & "*"
End If
' find list index for sorting
sortField = Me.ColumnFilter_ComboBox.ListIndex + 1
' populate sort order with value of Ascend/Descend options.
If descend Then
sortOrder = xlDescending
Else
sortOrder = xlAscending
End If
' Search column to see if text exists
isInCol = False
For Each foo In filterColumn
If caseSense Then
If InStr(foo.Value, filterText) Then ' > 0 Then
isInCol = True
Exit For
End If
ElseIf Not caseSense Then
If InStr(LCase(foo.Value), LCase(filterText)) Then
isInCol = True
Exit For
End If
End If
Next foo
If isInCol Then ' filter the table by the selected col; Use Range Sort
With ActiveSheet
currentData.AutoFilter Field:=sortField, Criteria1:=sortKey, VisibleDropDown:=False
currentData.Sort key1:=filterColumn, Order1:=sortOrder, Header:=xlYes
End With
End If
blah = bleh
End Sub
我认为问题是如果你的日期真的格式化为表中的日期。这意味着它们以数字形式存储。因此'6/15/1956'被存储为'20621'。如果是这样的话,你永远不会在日期中找到'6 /'。 – guitarthrower 2014-09-05 21:05:30
是的,它们被格式化为日期。所以这听起来像我是SOL。如果没有其他选项,那么谢谢你的尝试。 – JSM 2014-09-05 22:44:18
如果你能够创建一个帮手列,那么你仍然可以使它工作。帮助者列可以像'=“_”&B2'(如果B2是日期所在的地方)并且将其复制下来。然后,您可以执行您在助手列中描述的操作。 – guitarthrower 2014-09-05 23:11:44