【问题标题】:copy datetime value from csv into excel using macro使用宏将日期时间值从 csv 复制到 excel
【发布时间】:2015-05-02 08:24:47
【问题描述】:

我正在尝试打开 csv 文件列表并将数据复制到 Excel 文件的不同电子表格中。 我的脚本如下

Sub importcsv()
    Dim strFile As String
    Dim strCSV As String
    strFile = "D:\15049"
    strCSV = "A4260512_ECRec.csv"
    Workbooks.Open Filename:=strFile & "\" & strCSV
    Range("A1").CurrentRegion.Copy Destination:=Workbooks("test 150302.xlsm").Sheets("test2").Range("A1")
    Workbooks(strCSV).Close
End Sub

我遇到的问题是在我的 csv 文件中有一列日期时间数据 (dd/mm/yyyy hh:mm),当将它们复制到 excel 时,有些是按正确的顺序复制的,有些则不是。例如,精确复制 1990 年 3 月 31 日,但 1990 年 1 月 4 日复制为 1990 年 4 月 1 日。在我的区域设置中,日期格式设置为 d/mm/yyyy。

有人知道吗?请帮忙。

谢谢,

【问题讨论】:

  • 目标文件是否可能只是显示同一日期的不同格式?
  • 在目标文件中,31/3/1990 显示为一般格式,4/1/1990 显示为日期格式。当我将日期格式更改为 dd/mm/yyyy 时,没有任何变化。

标签: excel vba csv


【解决方案1】:

您是否尝试过设置复制粘贴区域的数字格式?

Worksheets("Sheet1").Columns("A").NumberFormat = "YYYY/MM/DD"

范围和行

Worksheets("Sheet1").Range("A17").NumberFormat = ""
Worksheets("Sheet1").Rows(1).NumberFormat = "hh:mm:ss"

【讨论】:

  • 谢谢,我刚刚试过了,还是不行。我认为 excel 仍然将 '1/4/1990' 读为 mm/dd/yyyy
  • 是的,它只发生在 csv 文件中的日期在 1 到 12 范围内时。例如。在我的 csv 文件中 24/07/2008 347 25/07/2008 362 26/07/2008 364 27/07/2008 367 28/07/2008 364 29/07/2008 360 30/07/2008 354 31/07/ 2008 337 01/08/2008 337 02/08/2008 333 03/08/2008 336 04/08/2008 343 在我的目标文件中: 23/07/2008 24/07/2008 347 25/07/2008 362 26 /07/2008 364 27/07/2008 367 28/07/2008 364 29/07/2008 360 30/07/2008 354 31/07/2008 337 08/01/2008 337 08/02/2008 333 08/03 /2008 336 08/04/2008 343
  • 如果你只需要这样做一次,我想你可以使用 if 语句绕过它。测试 DD 值是否等于或小于 12,使用 dd/mm/yyyy 作为数字格式。或者尝试使用特殊粘贴? (即 Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats)
【解决方案2】:

您需要在打开文件时将列指定为 DMY 格式。您可以通过以下两种方式之一进行此操作

  1. 添加到 QueryTable 的连接 - 手动完成此操作将使用数据功能区/获取外部数据选项卡/来自文本
  2. 将文件后缀改为.txt,然后使用Workbooks.OpenText方法。

以上两个都提供了指定日期列格式为 DMY 的选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多