【发布时间】:2018-04-26 08:17:33
【问题描述】:
我在 Access 中编写了一个 VBA 宏,它基于几个不同的文件创建了一个新的 excel 文件。我无法更改源文件格式化数据的方式,我想编写一个简单的 IF 语句(如果日期 X 已超过日期 Y,则删除整行)。问题是日期的格式不同。我能够做到的方式是创建一个新列:
=IF(DATEVALUE(A2)>DATEVALUE(H2),TRUE,FALSE)
然后从那里开始,最后删除该列。但这感觉不对,我相信有更好的解决方案。我一直在尝试做类似的事情
If ifDelete = vbYes And .Cells(Lrow, 19).Value Like "*timing*" And DateValue(.Cells(Lrow, 1).Value) > DateValue(.Cells(Lrow, 8).Value) Then
.Cells(Lrow, 19).EntireRow.Delete
End If
但这显然行不通。我还尝试在运行该 IF 语句之前对日期列进行格式化,但仍然没有运气。如果有帮助,日期格式为 MM/DD/YYYY 和 M/D/YYYY。出于某种原因,在第二个或两个字段上使用 .NumberFormat = "MM/DD/YYYY" 也不起作用。
亲切的问候, heaton124.
【问题讨论】:
-
显然,您说的是STRINGS CONTAINING DATE-LIKE VALUES,而不是真正的日期值。最简单且正确的方法是通过在 vb 中将这些字符串转换为内部日期值来确保比较 DATES AGAINST DATES。
-
没错,我知道。当我在测试文件上使用这样的代码时: Range("A1:J1").NumberFormat = "mm/dd/yyyy" 然后比较两个日期也无济于事。无论我输入“mm/dd/yyyy”还是“mm-dd-yyyy”或其他任何内容,这些单元格中的值都不会改变。不知道这里有什么问题。
-
您能分享一下您“所谓的”日期数据的屏幕截图吗?这样我们就可以看到它们是如何存储的,以及以什么格式存储?
-
就是这样。 link我还在右上角添加了“通用”类型。当我使用宏更改 NumberFormat 时,它确实会更改为“自定义”,但不会真正影响我的其他宏对数据的理解。顺便提一句。如果这很重要的话,该数据是从一月份开始的。
-
您是否尝试过使用VBA函数
CDate()?
标签: vba excel date if-statement