VBA - 日期参考



我是VBA的新手,有一个非常简单的问题。我构建了一个定期更新数据集的宏,该宏的功能之一是它检查以确保是否有前一个日期的数据,它会替换它。

它使用单元格引用来交叉检查数据集,但是我发现如果日期的格式也不相同,那么它不会替换它。 例如,如果 03/07/18,则它不会取代 03/07/2018。

关于我可以做些什么来规避这个问题的任何想法?提前谢谢你!

这是我为宏的这一部分编写的代码

Dim i As Integer, ValueToFind As Integer, LRow As Integer
intValueToFind = Sheet8.Range("L6")
Sheet3.Activate
LRow = Range("J" & Rows.Count).End(xlUp).Row
For i = 1 To LRow
If Cells(i, 10).Value = intValueToFind Then
MsgBox ("Found value on row " & i)

我可能会做这样的事情:

Dim i As Long, dateToFind As Date, LRow As Long, checkValue As Variant
dateToFind = CDate(Sheet8.Range("L6").Value)
Sheet3.Activate
LRow = Range("J" & Rows.Count).End(xlUp).Row
For i = 1 To LRow
checkValue = Cells(i, 10).Value
If IsDate(checkValue) Then
If dateToFind = CDate(checkValue) Then
MsgBox ("Found value on row " & i)
End If
End If
Next

似乎您正在声明所有内容都是整数,而实际上并非如此。此外,我出于习惯使用 Long 数据类型,这就是为什么我将您的两个整数(即整数(更改为 Long。

VBA有一个内置的"日期"数据类型,你可以在这里阅读更多关于它的信息。基本上,我们将日期分配给 dateToFind(日期数据类型(,并使用函数 CDate 强制单元格 L6 的值为 Date 数据类型。

然后,我们循环遍历您的单元格,并将值分配给变体。然后,我们检查该值以查看它是否"像"日期,由VBA的IsDate函数确定。如果是,我们将使用 CDate 强制它进入 Date 数据类型,并根据 dateToFind 进行检查。

请注意,在使用 CDate 之前,我们必须检查该值是否是 IsDate 的日期,因为如果单元格值不是日期格式,则强制其为 Date 类型将引发错误。我们没有第一次检查,因为我们可以合理地确信您使用的特定日期单元格 (L6( 实际上是日期。

希望这对你有用。

您是否尝试清除并重新应用日期格式? 像这样:

Dim i As Integer, ValueToFind As Integer, LRow As Integer

'Clear and apply a date format
Sheet8.Range("L6").ClearFormats
Sheet8.Range("L6").NumberFormat = "yyyy/mm/dd"
Columns(10).Select
Columns(10).ClearFormats
Columns(10).NumberFormat = "yyyy/mm/dd"
intValueToFind = Sheet8.Range("L6")
Sheet3.Activate
LRow = Range("J" & Rows.Count).End(xlUp).Row
For i = 1 To LRow
If Cells(i, 10).Value = intValueToFind Then
MsgBox ("Found value on row " & i)

最新更新