vba打开csv文件错误的date格式
我从foo.xlsm
文件使用vba,打开bar.csv
文件,然后将其复制到foo.xlsm
文件。 然而,令人惊讶的是,事实certificate,它会弄乱date格式,有时会识别为mm/dd/yyyy
, dd/mm/yyyy
。
csv文件有这样一行:
"USD/MYR","TRF:1234","20/04/2017","01/06/2017","11/09/2017","01/06/2017"
所以所有的date都是dd/mm/yyyy
格式。
如果我手动打开bar.csv
文件,则4个date显示正确,如
20/4/2017 1/6/2017 11/9/2017 1/6/2017
但是,如果从foo.xlsm
使用vba打开bar.csv
文件,事实certificate是这样的
20/04/2017 6/1/2017 9/11/2017 6/1/2017
,因此后来复制到foo.xlsm
错误的date。
看起来好极了,首先将date解释为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
有什么可能出错?
如果您正在使用Workbooks.Open
打开您的CSV文件,Excel会将date转换为美国格式,除非不可能(所以它会尝试其他格式)。
你可以尝试添加一个参数Local:=True
来解决它。
因为看来你是对的,Excel试图先把date解释为mm / dd / yyyy,只有这样做不行的时候,才会读取为dd / mm / yyyy:
使用NumberFormat
属性强制正确的格式:
For row = 1 To last_row For col = 1 To last_col dest_sheet.Cells(row, col).Select ActiveCell.NumberFormat = "dd-mm-yyyy" src_data = src_sheet.Cells(row, col).Value dest_sheet.Cells(row, col).Value = src_data Next col Next row
尝试一下,看看是否有帮助,强制适当的date格式到每个目标单元格。