ath*_*hos 1 csv excel vba date
我正在使用foo.xlsm文件中的 vba 打开bar.csv文件,然后将其复制到foo.xlsm文件中。然而,令人惊讶的是,事实证明它会弄乱日期格式,有时会识别为mm/dd/yyyy,有时会识别为dd/mm/yyyy。
csv 文件有这样一行:
"USD/MYR","TRF:1234","20/04/2017","01/06/2017","11/09/2017","01/06/2017"
Run Code Online (Sandbox Code Playgroud)
,所以所有日期都是dd/mm/yyyy格式化的。
如果我bar.csv手动打开文件,4 个日期会正确显示,如下所示
20/4/2017 1/6/2017 11/9/2017 1/6/2017
Run Code Online (Sandbox Code Playgroud)
但是,如果foo.xlsm使用vba打开bar.csv文件,结果是
20/04/2017 6/1/2017 9/11/2017 6/1/2017
Run Code Online (Sandbox Code Playgroud)
,因此后来复制到了foo.xlsm错误的日期。
看来Excel试图将日期解释为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
Run Code Online (Sandbox Code Playgroud)
可能出了什么问题?
如果您使用Workbooks.Open打开 CSV 文件,Excel 会将日期转换为美国格式,除非不可能(因此它会尝试其他格式)。
您可以尝试添加一个参数Local:=True来解决它。