【问题标题】:Excel VBA date copying different for no apparent reason?Excel VBA日期复制无明显原因不同?
【发布时间】:2017-06-30 11:12:43
【问题描述】:

简单的任务,结果令人困惑。

我正在使用以下方法复制一系列数据:

WS.Range("A2:Z" & lRow).Copy
ThisWorkbook.Worksheets("Import").Range("A2:Z" & lRow).PasteSpecial xlPasteValues

复制表的第一列是格式为12/05/2017 01:00:00 的日期(注意日期和时间之间的双空格)

在一个例子中,日期值被很好地粘贴并作为日期出来 - 太棒了!

在另一个例子中,日期值被粘贴,但显示为14/05/2017 01:00,这些没有注册为日期,而是作为文本字符串。

我注意到我可以逐个单元格地浏览日期,然后按 Enter 键将它们转换为日期,所以我尝试使用 .range("A1:A100").value = .range("A1:A100").value 无济于事。

我怀疑它可能与日-月-年格式有关,而不是月-日-年(因为它适用于从 5 月 12 日开始但不在 5 月 14 日开始的工作表)但是( 1) 是否还有其他区别,(2) 为什么按 ENTER 可以正常工作以及 (3) 我如何在整个单元格范围内模拟按 ENTER (记住 .value = .value 不起作用)

【问题讨论】:

  • 出于好奇,您的 PC 上的短/长日期区域设置是什么?
  • 短日期设置为 dd/MM/yyyy,长日期设置为 dd MMMM yyyy

标签: excel vba


【解决方案1】:

简而言之:类型转换(首先在值对您的工作表造成问题之前修复它们)绝对是最好的方法。

长篇大论:

让我们从这两个值开始:

22.05.2017 12:00
22.05.2017  12:00

我将把第一个放在A1 中,将第二个放在B1 中。请注意,Excel 经常会尝试进行类型转换,因此在这种情况下,我将手动强制 A1 通过在事后格式化单元格来包含文本值。

让我们验证一下:

使用即时窗口,我们可以看到编译器将A1 的内容识别为纯文本值,而将B1 中的内容识别为日期值。

您需要的解决方案是确保将任何文本值转换为日期值:

Option Base 1

Sub pasteTextAsDate()
    Dim dateArr As Variant
    Dim rng As Range

    Set rng = ThisWorkbook.Worksheets(1).Range("A1:A3")

    ' In the line below, we fill the variant variable with the content of the range, casting the variable into an array of variants
    dateArr = rng

    ' For the sake of proving this code works, we'll start by printing the content and what type it is
    For Each s In dateArr
        Debug.Print s & " - " & TypeName(s)
    Next s

    For i = 1 To UBound(dateArr)
        ' This is where we loop through the array and cast any string values to date values
        dateArr(i, 1) = CDate(dateArr(i, 1))

        ' Here we verify for ourselves that the conversions are OK
        Debug.Print dateArr(i, 1) & " - " & TypeName(dateArr(i, 1))
    Next i

    ' And here we print the result to the worksheet
    ThisWorkbook.Worksheets(1).Range("C1:C3").Value = dateArr
End Sub

结果:

【讨论】:

  • 感谢您提供如此有益健康和简洁的回答!我会在周末将它应用到我的床单上,看看效果如何,但这看起来是一种很有前途的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多