我使用vba从foo.xlsm
文件,打开bar.csv
文件,然后将其复制到foo.xlsm
文件。然而,令人惊讶的是,事实证明,它会弄乱日期格式,有时识别为mm/dd/yyyy
,受害者dd/mm/yyyy
。vba打开csv文件搞混日期格式
CSV文件中有一行是这样的:
"USD/MYR","TRF:1234","20/04/2017","01/06/2017","11/09/2017","01/06/2017"
,所以所有的日期是在dd/mm/yyyy
格式。
如果我打开bar.csv
文件手动,4-日期正确地显示,由于
20/4/2017 1/6/2017 11/9/2017 1/6/2017
然而,如果从使用VBA打开bar.csv
文件foo.xlsm
,它被证明是
20/04/2017 6/1/2017 9/11/2017 6/1/2017
,因此后来复制到foo.xlsm
错误的日期。
看起来好极了,首先将日期解释为mm/dd/yyyy
,只有当这不起作用时,才会将其读取为dd/mm/yyyy
。
VBA代码是这样的:
Sub import_via_excel(source_file As String, source_sheet As String, target_sheet As String)
On Error GoTo ErrHandler
Application.ScreenUpdating = False
Set wbThis = ActiveWorkbook
Dim dest_sheet As Worksheet
Set dest_sheet = wbThis.Sheets(target_sheet)
Dim src_book As Workbook
Set src_book = Workbooks.Open(source_file, True, True) ' Open in "ReadOnly" mode
Dim src_sheet As Worksheet
Set src_sheet = src_book.Sheets(source_sheet)
src_sheet.Activate
last_col = ActiveSheet.UsedRange.Columns.Count
last_row = ActiveSheet.UsedRange.Rows.Count
Dim row As Integer ' row counter.
Dim col As Integer ' col counter.
Dim src_data As String
For row = 1 To last_row
For col = 1 To last_col
src_data = src_sheet.Cells(row, col).Value
dest_sheet.Cells(row, col).Value = src_data
Next col
Next row
src_book.Close False ' close file without saving (FALSE)
Set src_book = Nothing
wbThis.Activate
ErrHandler:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
什么可能出了问题?
但我不能提前知道格式是什么,在一般函数中...... – athos
也许,但是你能不能提供所需的格式作为另一个参数吗?你不知道任何给定的输入文件的所需格式? – TomServo
如果以dd-mm-yyyy格式考虑,这些是正确的吗? “2017/04/04”,“2017/01/06”,“2017/11/09”,“2017/01/06”如果是这样,那么也许你的原始数据源格式是天为先。如果这些都不正确,而且这些格式是混合格式,那么最好的办法就是以某种方式在您的输入中强制执行一个标准格式,以便您可以强制它成为您想要的格式。 – TomServo