我正在从许多工作簿中收集数据。问题是,在每个文档中日期格式不一致: 16/01/2015 2015年1月6日 的 2014年3月24日
我想要实现的是" YYYY-MM-DD"格式。在我的代码中,我有一个负责清除日期列的案例。现在我变得绝望了,我在代码中添加了大量的日期格式,但是对于虚线格式(上面带有粗体的格式)没有变化。即使我手动选择列并更改格式类型,或将值复制到.txt文件,然后复制回原始工作表,也尝试使用新的工作簿,但没有任何反应。为什么在这几个例子中无法更改日期值?任何帮助,将不胜感激。这是代码:
Case 6:
sourceWorkbook.Activate
sourceWS.Activate
sourceWS.Columns(i).Select
Selection.NumberFormat = "YYYY-MM-DD;@"
sourceWS.Range(Cells(2, i), Cells(lastrw, i)).NumberFormat = "YYYY-MM-DD;@"
For j = startRow To lastrw Step 1
'Assign the header to the first row
NewWorksheet.Cells(1, i) = sourceWS.Cells(startRow, i).Value
On Error Resume Next
textToFormat = CStr(sourceWS.Cells(j, i).Value)
d = CDate(textToFormat)
finalDate = Format(textToFormat, "YYYY-MM-DD")
NewWorksheet.Cells(j - adjustRows, i) = finalDate
'This error handler purpose to handle the header name!
If Err Then
NewWorksheet.Cells(j - adjustRows, i) = textToFormat
End If
On Error GoTo 0
Next j
Set fckFormat = NewWorksheet.Columns(i)
fckFormat.NumberFormat = "YYYY-MM-DD;@"
NewBook.Activate
NewWorksheet.Activate
NewWorksheet.Columns(i).Select
Selection.NumberFormat = "YYYY-MM-DD;@"
答案 0 :(得分:0)
正如乔丹建议的那样,问题是这些数据被格式化为字符串而不是日期。例如,如果我在新工作簿中输入上述每个日期,则前两个被正确检测为日期(并且可以格式化为这样),而最后一个被视为文本字符串。这可能会因您的区域设置而异。
不幸的是,CDate函数也无法将此格式识别为有效日期。尝试运行以下内容,您将收到类型不匹配错误:
Set datecol = Sheets(1).Columns(1)
datecol.Replace What:=".", Replacement:="/", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
您可以使用替换方法将此转换为有效日期,方法是用斜线替换点:
d = CDate(textToFormat)
NewWorksheet.Cells(j - adjustRows, i) = d
单元格仍将被格式化为字符串,但您现在可以使用现有循环将其转换为使用CDate的日期:
create dm_document object SET title = 'TEST', SET subject = 'TRIAL', set object_name = 'Test123', SETFILE 'c:\test.txt' with CONTENT_FORMAT= 'msww'
NumberFormat将正常工作。
注意:我建议使用CDate而不是Format,以便日期仍然存储为值而不是文本。