如何在VBA中比较时间

3
我想编写一个宏,比较单元格A1和B1中的两个时间。我尝试使用以下代码,但是在date1 = TimeValue(Range("A1"))处出现了"类型不匹配" 的错误提示。例如,单元格A1中的值如下:11/18/2011 10:11:36 PM
dim date1 as date
dim date2 as date 
date1 = TimeValue(Range("A1"))
date1 = TimeValue(Range("B1"))
if date1 > date2 then
'do something 
else 
'do something else
end if 
5个回答

2

你需要使用Range("A1").Value


2
这不应该对类型不匹配错误造成任何影响,当使用Range("A1")时,默认情况下返回值。 - brettdj

2

两个问题:

  1. 尝试将A1单元格中的值更改为11/10/2011 10:11:36 PM。如果现在能正常工作,可能是由于区域设置不匹配造成的。
  2. 您已经声明了date1date2,但是正在两次分配给date1并且从未分配给date2

1

使用 application.worksheetfunction.mod(日期值, 1)

您需要了解,在Excel中,日期和时间是用序列号表示的,其中1等于一天,时间用小数或分数表示。

所有系统都以零日为基础,即1900年1月1日=1,1900年1月2日=2,以此类推。

在Excel工作表上,您可以使用today()获取当前日期和时间。在vba中,您应该使用Now。今天的日期,“0”或“常规”数字格式应显示以42...开头的数字,它代表自1900年1月1日以来的天数。

由于一天有24小时,如果您想引用1小时或1:00 AM,则序列号中的小数或分数相当于1/24。7:00 PM = 19/24。

mod()是一个公式或函数,将返回除法的余数。请记住,时间用小数表示,您不需要实际的整数。

您可以通过在任何公式或函数之前使用“application.worksheetfunction.”在vba中使用mod()公式。

当您使用mod()除以1来分割日期和时间时,它将返回余数,即您的日期的小数部分,也就是时间。
比较datevalue("1:00 PM")将不等于CDate("May 8, 2015 1:00 PM")。

0

可以直接使用.Text而不是.Value来完成吗?

Dim date1 As Date
Dim date2 As Date
Dim date3 As Date

date1 = TimeValue(Range("A1").Text)
date2 = TimeValue(Range("B1").Text)
date3 = TimeValue(Range("C1").Text)

If date3 >= date1 And date3 <= date2 Then
     'Yes!
Else
     'No!
End If

0
 sub compare_dates()
     dim  date1 as date
     dim  date2 as date
     dim  str   as string
     str = activesheet.range("A1").value 'str  = "11/18/2011 10:11:36 PM"
     str = Left(str,Instr(str," ")-1)    ' str = "11/18/2011"
     date1 = str   ' assign it to date1
     str = activesheet.range("B1").value ' in the same way b1 cell value
     str =  left(str,instr(str," ")-1)
     date2 = str
     if date1 >  date2 then
          ' do something
     end if
 end sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接