以编程方式打开文件时,Excel VBA日期格式/值会更改

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)行.很抱歉没有提起这件事.

Dav*_*rth 9

由于OP在评论中已经回答了这个问题,但没有作为正式答案发布,我会把它放在这里以防其他人像我一样错过它.

workbook = workbooks.Open(filename, Local:= true)
Run Code Online (Sandbox Code Playgroud)

通过设置Local = true使用本地机器日期格式而不是假设mdy所以在澳大利亚(dmy)这样的语言环境中它会改变Open()的行为

  • 感谢您澄清这一点,因为刚刚遇到了同样的问题。虽然很明显存在本地问题,但修复方法并不那么明显(除非您清楚地知道每个小函数参数)。我看不出该选项默认情况下不正确的原因。 (2认同)

Sid*_*out 0

我可以尝试将整个 .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)