【问题标题】:Converting a column of UK dates to text in VBA将一列英国日期转换为 VBA 中的文本
【发布时间】:2016-10-31 12:02:14
【问题描述】:

我的系统位于英国区域(Windows 7,Office Professional Plus 2013)。

我有一些日期列,以英国格式 (dd/mm/yyyy) 存储为日期,我需要将它们转换为相同格式的文本。我遇到的问题是,似乎每个 VBA 函数在转换为文本时都默认吐出美国格式的日期。

我尝试使用 range.TextToColumns 函数,示例代码如下(主要是基于宏记录器 - 奇怪的是,文本到列在 excel 中工作正常,但记录的代码给出了美国日期......奇怪)

Sub ColumnToText(rngColumn As Range)
' ---------------------------------------------------------------------
'   Takes a column, coverts it to text
' ---------------------------------------------------------------------

rngColumn.TextToColumns _
    Destination:=rngColumn.Range("A1"), _
    DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, _
    Tab:=False, _
    Semicolon:=False, _
    Comma:=False, _
    Space:=False, _
    Other:=False, _
    FieldInfo:=Array(1, 2), _
    TrailingMinusNumbers:=True

End Sub

有很多方法可以通过循环遍历单元格来做到这一点,但我的目标是找到一个有效的解决方案,我可以在未来以及这种情况下使用(我对优化有点强迫症)。

理想情况下,我希望能够让 TextToColumns 函数在 VBA 中像在 Excel 中一样工作,但我意识到这可能是不可能的。

【问题讨论】:

  • 将日期存储为文本并不是一个好主意。为什么要这样做?
  • 我别无选择,这是需要日期作为文本字符串的应用程序的接口数据。
  • @Coder375 即使 2 年过去了,这个问题仍然存在。在尝试了以下所有内容之后,我放弃了。但是,我与您分享我的解决方案。我拥有的数据来自一封 csv 附件的电子邮件。使用 VBA,我将带有日期的数据复制到另一个工作簿中,然后日期格式就会混乱并变成 mm/dd/yyyy。我最终只是复制了 csv 中的数据,并将其粘贴到空白工作簿中并保存为 XLSX。出于某种我不知道的原因,这已经解决了这个问题。从 xlsx 复制到目标工作簿由 VBA 完美处理,但不适用于 csv

标签: excel vba


【解决方案1】:

如果您的操作系统 (Windows) 是英文-美国版本,则可以使用 r.Value = t

Set r = Range("a1:a9")
t = r.Value
r.NumberFormat = "@"
r.Value = t

否则如果不希望将日期转换为美国日期格式,则必须使用 r.FormulaLocal = t

Set r = Range("a1:a9")
t = r.Value
r.NumberFormat = "@"
r.FormulaLocal = t

当数据从 vba 发送到单元格时,如果需要,即如果数据类型与 numberformat 属性不同,则会调用内部类型转换函数。 此内部类型转换函数仅识别国际日期格式(yyyy / mm / dd)和美国日期格式(例如 mm / dd / yyyy)

您可以使用 cell.FormulaLocal = data 代替 cell.Value = data 来避免调用此函数。

【讨论】:

  • 完美运行,我也感谢您的解释。
【解决方案2】:

这将一次完成整个列。

Sub foo()
[A:A].NumberFormat = "@"
[A:A] = [IF(A:A<>"", TEXT(A:A,"dd/mm/yyyy"),"")]
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    相关资源
    最近更新 更多