在日期/时间单元格上使用Instr的VBA不一致

时间:2016-10-18 14:57:29

标签: vba excel-vba excel

我有一个日期/时间列表,我正在使用InStr找到我正在寻找的时间,Excel中的单元格如下:19/07/2016 10:55:00 AM

我在这里寻找12:00至12:59 AM之间的任何时间:

If InStr(1, ActiveCell.Value, " 12:") > 0 And InStr(1, ActiveCell.Value, "AM") > 0 Then

我通过50个文件进行扫描。它适用于前28个和第29个文档(具有类似数据),它返回0.

我也有成功搜索“12:”,“1:”,“2:”等的文档,但是当我搜索“7:3”时它返回0。

ElseIf InStr(1, ActiveCell.Value, " 7:3") > 0 And InStr(1, ActiveCell.Value, "AM") > 0 And ActiveCell.Row > Leq730Row + 600 Then

但是,再一次,有些文件会成功返回,而其他文件则没有。

在开始阅读数据之前,是否必须指定时间格式?当我打开excel时,文件看起来一样,但我觉得我不理解VBA如何读取单元格。

1 个答案:

答案 0 :(得分:1)

时间存储为小数,因此有三个选项:

首先使用小数而不是文字:

ElseIf InStr(1, ActiveCell.Text, " 12:") > 0 And InStr(1, ActiveCell.Text, "AM") > 0 And ActiveCell.Row > Leq730Row + 600 Then

或者您可以参考单元格的文本:

ElseIf InStr(1, Format(ActiveCell.Value, "dd/mm/yyyy hh:mm:ss AM/PM"), " 12:") > 0 And InStr(1, Format(ActiveCell.Value, "dd/mm/yyyy hh:mm:ss AM/PM"), "AM") > 0 And ActiveCell.Row > Leq730Row + 600 Then

或者您可以在值上使用Format使其成为字符串文本:

man 5 core