【问题标题】:how to compare time in vba如何在vba中比较时间
【发布时间】:2011-11-24 04:05:04
【问题描述】:

我想编写一个宏来比较单元格 A1 和 B1 中可用的两次

我尝试使用以下代码,但它给了我 "type dismatch" date1 = TimeValue(Range("A1"))

例如像这样11/18/2011 10:11:36 PM单元格A1的值

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 

【问题讨论】:

    标签: vba excel time compare


    【解决方案1】:

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

    【讨论】:

    • 这应该不会对类型不匹配错误产生任何影响,使用 Range("A1") 时默认返回该值
    【解决方案2】:

    两件事:

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

    【讨论】:

      【解决方案3】:

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

      你应该明白,excel中的日期和时间是用序列号表示的,其中1等于一天,时间用小数或分数表示。

      所有系统的日期都是从第 0 天开始的,我们 1900 年 1 月 1 日 = 1,1900 年 1 月 2 日 = 2,依此类推。

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

      由于一天中有 24 小时,如果您想指代 1 小时或凌晨 1:00,序列号中的小数或小数等于 1/24。晚上 7:00 = 19/24

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

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

      当您使用 mod() 将日期和时间除以 1 时,它将返回余数,即日期的小数部分,即时间。

      比较 datevalue("1:00 PM") 将不等于 CDate("May 8, 2015 1:00 PM")

      【讨论】:

        【解决方案4】:
         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
        

        【讨论】:

          【解决方案5】:

          难道不能通过简单地使用 .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
          

          【讨论】:

            猜你喜欢
            • 2016-07-28
            • 1970-01-01
            • 1970-01-01
            • 2013-10-01
            • 2016-06-12
            • 2010-12-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多