以编程方式打开文件时Excel VBAdate格式/值发生更改

我有一个问题以编程方式打开.csv文件。 该文件是日常数据的时间序列,每个date都有几个数据点。

当我手动打开文件时,date正确打开,date格式为dd/mm/yyyy 。 但是,当我以编程方式打开文件时,直到每月12号的date以mm/dd/yyyy打开,尽pipe格式仍为dd/mm/yyyy (例如1983年7月1日(1983年1月7日) ,将于1983年1月7日(1983年1月7日)开始 – 这不仅仅是一个格式问题,与这些date相关的Juliandate(1901年1月1日以来的天数)也是变化的),以及每个月的第十二天都是正确的打开,尽pipe是文本而不是date。

以文本formsinput的数据不是问题,但打开文件后更改的date是有问题的。 我可以尝试导入整个.csv文件作为逗号分隔的文本,而不是实际打开文件,但是,如果我可以停止更改打开文件时的date会更容易和更快。

过去有没有人有类似的问题? 任何意见,将不胜感激。
干杯,本。

 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)。 对不起,没有把这个开始。

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

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

通过设置Local = true使用本地机器date格式,而不是在澳大利亚(dmy)等语言环境中假设mdy,它会改变Open()

我可以尝试导入整个.csv文件作为逗号分隔的文本,而不是实际打开文件,但是,如果我可以停止更改打开文件时的date会更容易和更快。

如果将其作为CDT打开,它仍然很快。 您只需使用.OpenText而不是.Open 。 其余的代码保持不变:)

尝试录制一个macros,你会看到代码看起来有点像这样。

 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 

我发现user2981639有正确的想法,但我得到了一个语法错误“Local:true”,所以我使用了“local:= True”

这个问题使我疯狂,因为我在csv文件中也有2个备忘录字段。 如果我试图以任何方式格式化date备忘录字段将无法正确导入,它们将被截断为255个字符或任何embedded的CRLF字符将剪切logging成块,具体取决于有多less。

感谢球员张贴

在这里,你会看到一个带有例子的工作代码。 这个问题也让我感到沮丧。 我在Excel中打开一个.txt文件,我用的date是从dd-mm-yyyy格式转换为mm-dd-yyyy格式。 下面你看到一个解决scheme。 它位于最后一个命令(,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 

注:以上设置数组和小数点分隔符是我的具体工作 – 可能不适用于你。