从这个和其他网站的先前问题,我得到了一个功能,可以解析和查找文本字符串或单元格中的日期。这是功能:
Function GetDate(strInput As String) As Date
Dim DateFormat() As String
Dim intDateLength As Integer
Dim intMaxFormat As Integer
Dim intFrmtCtr As Integer
Dim intPosition As Integer
intMaxFormat = 6
ReDim DateFormat(1 To intMaxFormat)
DateFormat(1) = "*##[-/]##[/-]####*"
DateFormat(2) = "*#[-/]##[-/]####*"
DateFormat(3) = "*##[-/]#[-/]####*"
DateFormat(4) = "*##[-/]##[-/]##*"
DateFormat(5) = "*#[-/]##[-/]##*"
DateFormat(6) = "*#[-/]#[-/]##*"
GetDate = Now
For intFrmtCtr = 1 To intMaxFormat
If strInput Like DateFormat(intFrmtCtr) Then
intDateLength = Len(DateFormat(intFrmtCtr)) - 8
strInput = Replace(strInput, " ", "")
For intPosition = 1 To Len(strInput)
If Mid(strInput, intPosition, intDateLength) Like DateFormat(intFrmtCtr) Then
GetDate = DateValue(Mid(strInput, intPosition, intDateLength))
Exit Function
End If
Next intPosition
End If
Next intFrmtCtr
End Function
然后通过引用单元格地址来调用它:
'Gets date from cell A2
Range("A2").Select
dateWork = GetDate(Selection)
然后我可以使用格式化输出 Format(dateWork, "mmddyy")
或类似的。
在上面的例子中,给出了一个单元格的内容 8/31/2011
字符串 08312011
退回。
但是,从单个数字日(即月初)的单元格内容日期开始,该函数开始返回年份的前两位数而不是后两位数。突然间,日期开始看起来像是在2020年,而不是2011年。
我已经能够使用其他相同的输入数据表进行测试,其中包括日期 8/31/2011
正确返回,日期开始 9/1/2011
并继续全年返回“20”。
这个功能在哪里崩溃?
更新问题的澄清:
我在几个宏中使用此函数,这些宏作用于从报表生成工具(Business Objects)导出的数据。可以手动编辑输入文件中的日期,但这可能会破坏宏的用途,因此不应被视为选项。
可以调用GetDate()函数来查找任何字符串中的日期。字符串可以是各种格式的日期,也可以是文本和日期的组合,例如“Totals from 9/13/1977”。
只要它保留了上面列出的功能,我将非常感谢您对该功能的简化或编辑。