我想编写一个宏,比较单元格A1和B1
中两次可用的宏我尝试使用以下代码,但它在"type dismatch"
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
答案 0 :(得分:2)
您需要使用Range("A1").Value
答案 1 :(得分:2)
两件事:
11/10/2011 10:11:36 PM
现在工作可能会出现区域设置不匹配date1
和date2
但已分配两次至date1
且从不
分配到date2
答案 2 :(得分:1)
使用application.worksheetfunction.mod(date value,1)
你应该明白excel中的日期和时间用序列号表示,其中1等于一天,时间用小数或分数表示。
所有系统的日期都是从我们1月1日1900 = 1和1月2日1900 = 2的第0天开始,依此类推。
在excel工作表上,您可以使用today()检索当前日期和时间。在vba上,你使用Now。今天的日期,在“0”或“常规”数字格式中应显示以42 ...开头的数字,表示自1900年1月1日以来的天数。
由于一天内有24小时,如果您希望参考1小时或凌晨1点,序列号中的分数或小数等于1/24。下午7:00 = 19/24
mod()是一个公式或函数,它将返回除法的余数。请记住,时间用小数表示,不需要实际的整数。
您可以使用“application.worksheetfunction”在vba中使用mod()公式。在任何之前。
当你使用mod()将日期和时间除以1时,它将返回余数,即你日期的小数部分,即时间。
比较日期值(“1:00 PM”)将不等于CDate(“2015年5月8日下午1:00”)
答案 3 :(得分: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
答案 4 :(得分: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