【问题标题】:VBA: interpeting English date format as stringVBA:将英文日期格式转换为字符串
【发布时间】:2017-04-24 10:20:31
【问题描述】:

我有一个包含英文格式日期的电子表格:

12 Feb 2015
13 Oct 2016
etc.

但是,由于我的 MS Excel 是法语的,它不会将它们作为日期,而是作为字符串。

我需要对这些值进行一些解析,所以我运行了我的程序,但发生了一些烦人的事情。无论操作系统/微软语言如何,VBA 都以英语设置,获取12 Feb 2015 作为日期,因此,当我将其打印回来时,它会返回法语日期(12-févr-2015,读作12/02/2015)。这会阻止我将该值与之前的 12 Feb 2015 进行比较。

无论如何我可以要求VBA不要主动将我的字符串解释为日期吗?

这是我的代码 + 测试用例的简化版本(但我猜如果在英文 Excel 上运行它你将看不到问题):

  1. 将字符串 12 Feb 2015 放入电子表格的 A1 范围内
  2. 运行以下代码:

    Sub test()
        myVal = Range("A1").Value
        Range("A2").Value = myVal
    End Sub
    
  3. Range("A2") 中的值将是 Excel 语言中的日期,而不是以前的字符串。

注意:我曾想过写Range("A2").Value = "'" & myVal 让值是String 而不是日期,但我以后无法将12 Feb 2015 与@ 进行比较987654331@ 和无论如何,12 Feb 2015 在被myVal = Range("A1").Value 读取时已经成为一个日期。

【问题讨论】:

  • 它真的需要12-févr-2015 并使其变为12/05/2015 还是这是编写它的技术错误?
  • 您的示例代码使用 Variant - 如果您想控制解释值的方式,那么您需要控制您正在使用的变量的数据类型。
  • @Vityata 我的意思是您在单元格中看到12-févr-2015,但如果您按F2 键检查值,它将是12/02/2015。 5 月而不是 2 月是打字错误,马上改!

标签: vba excel date


【解决方案1】:

如果要保留字符串,只需使用Text 代替Value,并将存储变量定义为字符串。像这样

Sub test()
    Dim myVal as String
    myVal = Range("A1").Text
    Range("A2").Value = myVal
End Sub

Text 是只读的,所以仍然使用Value 写入新单元格。包含ValueText 之间差异示例的文档:https://msdn.microsoft.com/en-us/library/office/ff840217.aspx

【讨论】:

  • 感谢 Wolfie,将尝试做出声明(问题是这个变量与其他变量混合在一起,我不知道它在游戏的哪个阶段变成了日期)并将接受您的回答如果它有效!
  • @MatteoNNZ,它应该在没有声明的情况下工作,但声明东西总是一个好习惯!声明不会强制格式,这是由.Text 完成的,它只是让编译器和程序员更清楚!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 2014-01-18
  • 2019-10-13
相关资源
最近更新 更多