2016-09-18 6 views
0

私は入力した値に基づいて通常(A2)、時間外(B2)、および倍精度(C2)の作業時間を入力する非常に簡単な目的のためにこのコードを使用します時間(E2)になります。Excelマクロで型の不一致エラーが発生しました

私はマクロを作成し、正しいコードを一緒にスクランブルしようとしましたが(後で必要に応じて修正できます)、強調表示されたコード行に「不一致エラー」が表示されます。私はいくつかの異なるリソースをオンラインで検索しただけで、私がこれで何が欠けているのか分からないようです。私はセルE2の値をdoubleとして定義していますが、適切なセル(E2)にテスト値(15.7)を入力していますが、セル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)を使用します。


はまた、文の以前の部分がTrueとして評価されている場合は、あなたのIf文のElseIf部分が処理されないことに注意してください。 Hours > 8あれば、あなたの文の最初の部分が実行されますので、時間< = 8


はまた、あなたは間違ってAnd演算子を使用する1文を持っていない限り、他のステップのどれも評価されません。 Andオペレータは、左オペランドと右オペランドの両方がTrueであるかどうかをチェックし、一致する場合はTrueを返します。それ以外の場合はFalseを返します。 (例えば、If x > 5 And x < 20 Thenのようなステートメントは、それを使用するのに賢明な方法です)。私はあなたが2つのステートメントを実行するためにそれを使用しようとしていると信じています。これを行う正しい構文は、x = 5 : y = 2のようなものか、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 
関連する問題