2016-09-18 128 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