2016-09-18 171 views
0

我有此代码的工作,其具有在定期的时间(A2),超时(B2)填充的一个非常简单的目的,和双OT(C2)的工作基于该值I输入变成几小时(E2)。类型不匹配的错误宏

我创建了宏,试图争抢在一起正确的代码(如需要,我可以以后正确的),现在我的代码高亮行收到“不匹配错误”。我在网上搜索了几种不同的资源,但似乎无法弄清楚我错过了什么。我把单元格E2的值定义为double,并且我有一个测试值(15.7)输入到适当的单元格(E2),但它仍然显示单元格E2没有值。

任何帮助表示赞赏。

Code

+4

上传你的代码作为文本,需要具有为图像我们很少使用 –

回答

1

Calculations是一个工作表对象。

Worksheets(value)可以传递字符串值,即工作表名称(例如Worksheets("Calculations"))或索引(例如Worksheets(1)),但它不能传递工作表对象。

变化所有的Worksheets(Calculations)用途到Worksheets("Calculations")(例如Worksheets("Calculations").Range("E2").Value),或完全绕过Worksheets方法,只是使用Calculations(例如Calculations.Range("E2").Value)。


还要注意的是,如果该语句的前面部分已被评为TrueIf声明ElseIf部分将不会被处理。您的发言的第一部分将执行,如果Hours > 8,所以没有其他步骤将评估除非时间< = 8


您还可以在您使用的And操作者错误的发言。一个And运营商检查是否左边的操作数和右操作数都是True,如果是这样,则返回True,否则返回False。 (例如If x > 5 And x < 20 Then这样的陈述将是一个明智的方式来使用它)。我相信你正在尝试使用它来执行两个语句。正确的语法可以像x = 5 : y = 2那样,或者将两个语句放在不同的行中。


我相信下面会做你想达到什么目的:

Sub Calculate 
    With Calculations 
     hours = .Range("E2").Value 
     If hours <= 8 Then 
      .Range("A2").Value = hours 
      .Range("B2").Value = 0 
      .Range("C2").Value = 0 
     ElseIf hours <= 12 Then 
      .Range("A2").Value = 8 
      .Range("B2").Value = hours - 8 
      .Range("C2").Value = 0 
     Else 
      .Range("A2").Value = 8 
      .Range("B2").Value = 4 
      .Range("C2").Value = hours - 12 
     End If 
    End With 
End Sub