【问题标题】:date format to string日期格式为字符串
【发布时间】:2014-05-06 17:22:03
【问题描述】:

我创建这个子的目的是采用默认的美国日期约定,将其更改为英国格式“yyyy-mm-dd”,然后转换为字符串。我想在转换为字符串之前更改格式,因为它更容易用于我的目的。但是,尽管单元格格式已更改,但该字符串似乎仍保留为原始美国格式。我该如何解决这个问题,它这样做的原因是什么?

Sub Changedate()

    Sheet1.Cells(1, 3).Select
    Selection.NumberFormat = "yyyy-mm-dd;@"
    Sheet1.Cells(1, 4).Select
    Selection.NumberFormat = "yyyy-mm-dd;@"

    Dim firstDate As String
    Dim secondDate As String

    firstDate = Str(Sheet1.Cells(1, 3).Value)
    secondDate = Str(Sheet1.Cells(1, 4).Value)

    MsgBox firstDate

    Sheet1.Cells(1, 3).Select
    Selection.NumberFormat = "m/d/yyyy"
    Sheet1.Cells(1, 4).Select
    Selection.NumberFormat = "m/d/yyyy"

End Sub

【问题讨论】:

  • 您在单元格中实际看到的典型值是什么......“格式”值?

标签: string date excel casting vba


【解决方案1】:

您应该使用:
firstDate = format(Sheet1.Cells(1, 3).Value, "yyyy-mm-dd")
Excel 日期只是一个数字,更改 NumberFormat 只会影响它的显示方式。 Str() 可能使用你系统默认的日期格式,你必须使用 Format() 强制它。

【讨论】:

  • 似乎不起作用。我试过这个,我得到一个编译错误......它应该工作(我查看vba帮助文件并复制并粘贴他们的格式示例)但错误显示“预期数组”
  • 我发布的代码对我有用,您能否发布工作表中的确切值(如 Gary 所问)?
  • 实际上不是我的问题,我只是在发布答案之前对其进行了测试,因为如果它有效,我不会打扰。它是一个编译错误,所以实际上与单元格中的值无关。虽然我设置的单元格中的“实际”值是09/03/2010
  • 我有excel 2010,你有什么?也许它是一个更新/旧版本的东西
  • 抱歉,您的代码运行良好,我只是度过了“愚蠢”的一天。我创建了一个名为“format”的字符串变量,所以当我试图调用该方法时,它试图用我的变量而不是方法做一些事情。
【解决方案2】:

您还可以尝试使用.text 属性而不是.value.value 获取单元格内容而不进行格式化。因此您可能会看到使用.value 的字符串格式不正确。 .text 获取单元格内容 with 格式(观察运行时间,如果这在循环中运行可能会开始需要很长时间。).text 是获取单元格内容最慢的方法,虽然只有几行或运行它不会有太大的区别

【讨论】:

    猜你喜欢
    • 2016-12-06
    • 1970-01-01
    • 2022-07-04
    • 2018-08-30
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    相关资源
    最近更新 更多