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

时间:2012-03-08 22:51:24

标签: excel vba date csv

我遇到了以编程方式打开.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

问题似乎发生在Workbooks.Open(File)行。很抱歉没有把它扔掉。

6 个答案:

答案 0 :(得分:7)

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

workbook = workbooks.Open(filename, Local:= true)

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

答案 1 :(得分: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

答案 2 :(得分:0)

我发现user2981639有正确的想法,但我的语法错误是' Local:true'所以 我使用过' local:= True'代替

这个问题让我疯了,因为我在csv文件中也有2个备忘录字段。 如果我试图以任何方式格式化日期,备忘录字段将无法正确导入,它们将被截断为255个字符,或者任何嵌入的CRLF字符会将记录切割成碎片,具体取决于有多少。

谢谢你们发帖

答案 3 :(得分:0)

在这里,您将看到一个带有示例的工作代码。这个问题也让我感到沮丧。我在excel中打开一个.txt文件,我用过的日期是从dd-mm-yyyy格式转换为mm-dd-yyyy格式。下面你看到一个解决方案。它位于最后一个命令中(Local:= True)。见下文。希望它有所帮助。

Note that while trasferring .txt file to excel use File Origin as "xlWindows:
    Workbooks.OpenText Filename:= _
    ThisWorkbook.Worksheets("Reporting").Cells(3, 6), Origin:=xlWindows, _
    StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(49 _
    , 1), Array(50, 1), Array(67, 1), Array(80, 1), Array(93, 1), Array(106, 1), Array(119, 1)) _
    , DecimalSeparator:=",", ThousandsSeparator:=".", TrailingMinusNumbers:= _
    True, Local:=True

注意:数组和小数分隔符的上述设置是我特定的工作 - 可能不适用于您。

答案 4 :(得分:0)

我也在努力寻找答案。但是,解决此问题的方法是::-

本地应该为真。 并且工作簿关闭保存更改必须为false。应该可以。

答案 5 :(得分:0)

我在 Office 365 中遇到了此问题。 通过Excel导入 csv 文件时,某些日期 dd / mm / jjjj (欧洲)被导入为美国日期 mm / dd / jjjj csv 文件没有关闭的日期格式。

打开如下:

Set xla = CreateObject("Excel.Application")
Set xlb = xla.Workbooks.Open(sFilePath, ReadOnly:=False, Local:=True)

使用了本地设置,并解决了问题:-)

打开文件的其他选项是:

expression.Open (FileName, UpdateLinks, ReadOnly, 
                 Format, Password, WriteResPassword, 
                 IgnoreReadOnlyRecommended, Origin, 
                 Delimiter, Editable, Notify, Converter, 
                 AddToMru, Local, CorruptLoad)