Ben*_*n F 6 csv excel vba date
我以编程方式打开.csv文件时遇到了一些问题.该文件是每日数据的时间序列,其中有几个数据点与每个日期相关联.
当我手动打开文件时,日期正确打开,作为日期格式dd/mm/yyyy
.但是,当我以编程方式打开文件时,截至每月12日的日期将被打开mm/dd/yyyy
,尽管格式仍然存在dd/mm/yyyy
(例如1983年7月1日(1983年1月7日),将于1983年1月7日开放(1983年7月1日) - 这不仅仅是一个格式化问题,与这些日期相关的朱利安日期(自1901年1月1日以来的日期)也发生了变化),并且正确地打开了每个月12日之后的日期,尽管如此文字而不是约会.
以文本形式出现的数据不是问题,但是,一旦打开文件,日期就会发生变化,这是有问题的.我可以尝试将整个.csv文件导入为逗号分隔文本,而不是实际打开文件,但是,如果我可以在打开文件时停止更改日期,则会更容易,更快.
过去有没有人遇到类似的问题?对此有任何建议将非常感激.
干杯,本.
Flder = InputBox("Copy and Paste Folder path here:")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set SourcePath = FSO.GetFolder(Flder)
For Each File In SourcePath.Files
Workbooks.Open (File)
FlNm = File.Name
StrtCol = Workbooks(FlNm).Worksheets(1).Range(Cells(4, 1), Cells(4, 30)).Find ("Mean").Column
Workbooks(FlNm).Worksheets(1).Range(Cells(1, 1), Cells(60000, 1)).Copy (Workbooks("Find Water Years V2.xls").Worksheets(1).Range("A3"))
Workbooks(FlNm).Worksheets(1).Range(Cells(1, StrtCol), Cells(60000, StrtCol + 1)).Copy (Workbooks("Find Water Years V2.xls").Worksheets(1).Range("B3"))
Workbooks(FlNm).Close
Next
Run Code Online (Sandbox Code Playgroud)
问题似乎发生在Workbooks.Open(File)行.很抱歉没有提起这件事.
由于OP在评论中已经回答了这个问题,但没有作为正式答案发布,我会把它放在这里以防其他人像我一样错过它.
workbook = workbooks.Open(filename, Local:= true)
Run Code Online (Sandbox Code Playgroud)
通过设置Local = true使用本地机器日期格式而不是假设mdy所以在澳大利亚(dmy)这样的语言环境中它会改变Open()的行为
我可以尝试将整个 .csv 文件作为逗号分隔的文本导入,而不是实际打开文件,但是,如果我可以在打开文件时阻止日期更改,则会更容易、更快。
如果你用CDT打开的话还是很快的。您只需使用.OpenText
而不是.Open
. 其余代码保持不变:)
尝试录制一个宏,您会发现代码看起来有点像这样。
Workbooks.OpenText Filename:= File, _
Origin:=437, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
Run Code Online (Sandbox Code Playgroud)