VBA - 日期格式“mm / dd / yyyy”

时间:2016-04-12 07:18:17

标签: vba excel-vba date excel

我的日期excel文件格式为Mar 30 2016 10:12:27:396AM我想将格式更改为mm/dd/yyyy。但是我的代码出错了。

  

运行时错误'13':类型不匹配

这是我收到错误SecondDate = Trim(Sheet2.Range("B" & RowNo).Value)

的行

注意:A列和B列的数据是日期

我的代码:

Dim Result, RowNo As Long
Dim FirstDate As Variant
Dim SecondDate As Variant

RowNo = 2

    FirstDate = Trim(Sheet2.Range("A" & RowNo).Value)
    SecondDate = Trim(Sheet2.Range("B" & RowNo).Value)
    FirstDate = Format(FirstDate, "mm/dd/yyyy")
    SecondDate = Format(SecondDate, "mm/dd/yyyy")

    Do Until Sheet2.Cells(RowNo, 1) = ""

    FirstDate = Sheet2.Cells(RowNo, 1)
    SecondDate = Sheet2.Cells(RowNo, 2)

        If DateDiff("d", FirstDate, SecondDate) >= 15 Then
        Sheet2.Cells(RowNo, 3) = "1"
        Sheet2.Cells(RowNo, 4) = "2"

    End If

   RowNo = RowNo + 1
   Loop

我确实感觉自己正走在正确的道路上......我错过了什么?

更新:我的脚本将从Column AColumn B获取数据并使用 DateDiff 功能我将减去两列如果差异<15,则将Column C and D标记为1, 2

注意:

  • 我只从两列中减去天数..但是可以减去天数和年份吗?
  • 如果我在excel中使用格式mm / dd / yyyy但是如果我使用其他格式我得到了错误 mismatch

更新2

       Column A            | Column B                   | Column C
Mar 1  2016 10:12:27:396AM | Mar 30 2016 10:12:27:396AM |
Mar 1  2016 10:12:27:396AM | Mar 30 2016 10:12:27:396AM |

在我的文件中这是日期格式,如果您尝试将其作为示例数据,它将无法工作,因为VBA不会将其识别为dateformat?

1 个答案:

答案 0 :(得分:1)

也许这会解决你想要做的事情。

测试输入:

enter image description here

测试输出:

enter image description here

代码:

Sub DateStuff()
    Dim FirstDate As Range, SecondDate As Range
    Dim RowNo As Long

    Set FirstDate = Sheet4.Range("A1")
    Set SecondDate = Sheet4.Range("A2")

    FirstDate.NumberFormat = "mm/dd/yyyy"
    SecondDate.NumberFormat = "mm/dd/yyyy"

    RowNo = 2
    Do Until Sheet4.Cells(RowNo, 1) = ""
        Set FirstDate = Sheet4.Cells(RowNo, 1)
        Set SecondDate = Sheet4.Cells(RowNo, 2)
        If IsDate(FirstDate.Value) And IsDate(SecondDate.Value) Then
            If DateDiff("d", FirstDate, SecondDate) >= 15 Then
                Sheet4.Cells(RowNo, 3) = 1
                Sheet4.Cells(RowNo, 4) = 2
            End If
        End If
        RowNo = RowNo + 1
    Loop
End Sub

请花几分钟时间了解此代码:

  • FirstDate和SecondDate是Range数据类型,而不是Date或Variant。他们指向的单元格中的数据是日期或其他内容。

  • 设置格式时,会设置工作表上的显示方式。它没有在VBA中格式化字符串。

  • 在进行DateDiff调用之前,请确保FirstDate和SecondDate在单元格中确实包含Date数据类型,这样可以防止出现许多错误。

  • 使用Date函数对Date数据类型的操作不依赖于格式。他们使用内部日期类型。格式化仅影响日期转换为字符串和/或在工作表上显示的方式。

你问过检查年份而不是白天。内置的VBA功能(例如年,月等)将有助于此。

关于您对问题的更新:

我不确定您从哪里获取时间码,但Excel无法识别:000毫秒。它使用.000。见下文......

enter image description here