處理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