【问题标题】:Date Concatenation VBA日期连接 VBA
【发布时间】:2015-06-16 13:58:53
【问题描述】:

我正在尝试连接,但它不起作用

Dim i As Integer
          For i = 2 To lastRow
          If Not IsDate(wsFinal.Cells(i, 17).Value) Then
            With wsFinal
                .Cells(i, 17).NumberFormat = "#"
                .Cells(i, 17).Value = "01/01/" & wsFinal.Cells(i, 17).Value
            End With
       End If
       Next i

例如,如果我有一个存储为文本的数字 (1949),我试图将格式更改为不是日期的数字,以便可以循环访问。然后我想将那一年添加到 01/01/xxxx。谁能告诉我怎么了?

【问题讨论】:

  • 你得到什么结果?你需要什么结果?
  • 哦,它只是将 1/1 添加到所有空行,这是一个问题..
  • 您将单元格设置为数字格式(#),然后用日期覆盖值,设置日期格式.Cells(i, 17).NumberFormat = "dd/mm/yyyy"
  • 我宁愿使用类似的东西: .Cells(I, 17).Value = DateSerial(.Cells(I, 17).Value, 1, 1) Excel 应该能够将值解释为日期本身,因此可能不再需要设置格式。

标签: vba excel concatenation


【解决方案1】:

尝试使用dd/mm/yyyy 数字格式。 # 用于数字值。

Dim i As Integer
For i = 2 To lastRow
    If Not IsDate(wsFinal.Cells(i, 17).Value) Then
        With wsFinal
            .Cells(i, 17).NumberFormat = "dd/mm/yyyy"
            .Cells(i, 17).Value = "01/01/" & wsFinal.Cells(i, 17).Value
        End With
    End If
Next i

还要确保 wsFinal.Cells(i, 17) 实际上返回一年。

IsEmpty 不是用于测试值的函数。它更多地是关于测试变量,例如数组或对象,以查看它们是否已初始化。

例如,

Dim iCtr 
Debug.Print IsEmpty(iCtr)   '<- Will Print True
iCtr = Null
Debug.Print IsEmpty(iCtr)   '<- Will Print False

在上面的例子中,我们已经将变量iCtr初始化为Null,虽然在普通世界中它仍然不是一个值,但它仍然被初始化。所以IsEmpty 不会产生正确的结果。使用IsNull 进行测试可能会更好。然而Zero Length String 并不是真正的 Null,所以当iCtr = vbNullStringIsNull("") 会失败。所以事后看来,IsEmptyIsNull 可能不会成功。

我所说的使用 IsDate确保 wsFinal.Cells(i, 17) 实际上返回一年)是,如果您测试 IsDate("Happy"),结果将是 False ,因此您正在检查的条件将通过,因为它是 Not IsDate("Hello"),因此请确保它返回一个数字而不是 Hello 或其他字符串,它不是日期。

总之,请特别注意您使用的功能。我会推荐Not IsDate,然后是IsNumeric

【讨论】:

  • If Not IsDate(wsFinal.Cells(i, 17).Value) and if Not IsEmpty(wsFinal.Cells(i, 17).Value) 这个statemetn有问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 2020-02-17
相关资源
最近更新 更多