【问题标题】:doing a calculation on a time formatted cell in excel vba在excel vba中对时间格式的单元格进行计算
【发布时间】:2013-01-29 04:50:24
【问题描述】:

我有三个单元格 IN 、 OUT 和 OverTime 都格式化为 [h]:mm, OT细胞有这个论坛,

=ROUND(IF(((D10-C10)+(D11-C11))*24>7,((D10-C10)+(D11-C11))*24-7,0)/24*96,0)/96 

计算 OT 到 1/4 小时

8 C D E F 
9   IN      OUT      O/T  C/T
10 7:30 AM 12:15 PM 1:45
11 1:00 PM 5:00 PM

当员工当天下班时,我想要以下内容 要运行的代码;

Dim CT As Date
Title = "Add to CompTime from OverTime"
If Range("E10") > 0 Then
CT = InputBox("Add Hours to CompTime?", Title)
If CT > 0 Then Range("F10").Value = ("E10" - CT)
Else: Range("F10").Value = " "
End If
End Sub

似乎一切正常,除了; 如果 CT > 0 则 Range("F10").Value = ("E10" - CT) 我知道这是格式问题,但我无法解决问题。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    始终尝试对范围进行显式引用,无论它们是在工作表还是模块上。使用对象的适当属性 - 在您的情况下,您的范围 E10 不合格。假设您在工作表 1:

    Option Explicit
    '--Beginning of your Subroutine...
    Dim Title as String '-- assuming
    Dim CT As Date '-- are you sure you want to have a date here?
    
    Title = "Add to CompTime from OverTime"
    
      If Sheets(1).Range("E10").Value > 0 Then '-- assuming it's a valid date here...
        CT = InputBox("Add Hours to CompTime?", Title)
        '-- assume your CT = 2:45 and OT = 75:30
        '-- use the following as mentioned in my comment
        If CT > 0 Then 
           Application.Text( Sheets(1).Range("F10").Value ,"[h]:mm")  = 
           Application.Text(Sheets(1).Range("E10").Value, "[h]:mm") - Application.Text(CT, "[h]:mm") 
        Else
           Sheets(1).Range("F10").Value = " "
        End If
      End If
    End Sub
    

    PS:如果你想计算小时数,你可能只是使用 VBA 来完成整个计算.. =)

    【讨论】:

    • 抱歉,我没有发布此工作表的所有代码。所有假设正确。日期变暗是问题所在。是的,我需要计算小时数,我有一个 [h]:mm 格式的 OT 每周总数,想要一个公式从 OT 中减去 x 小时并将相同的格式返回到新单元格,并将 OT 总数减少相同的 x小时。
    • 糟糕,我错过了您的评论。我建议您在 VBA 中使用Application.Text(cellvalue,"[h]:mm") 格式化您的 CT 和 OT,然后进行减法。
    • 谢谢!我试试看。
    • 我添加了您的建议,CT 仍然存在格式问题。如果 E10 的值(总 OT)= 17:15 和 CT = 7:15,我在“Application.text ...”代码的两行都收到类型不匹配错误。如果我将鼠标悬停在 - Application.Text(CT, "[h]:mm") CT 的值 = 7:15:00 AM。它就像 [h]:mm 格式没有被应用。
    • 让我试一试,现在我在一台机器前 :) 抱歉完全忘记了。但我能澄清一件事吗,我将使用Total OT = 17.15 and CT = 7.15 进行测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 2015-06-08
    • 1970-01-01
    相关资源
    最近更新 更多