1

詳細: このセグメントでは、満たされた条件に応じて、「z」で参照されるセルに、「a」で参照されるセルから変更された日付値を入力しています。コードは内側の End If 行でクラッシュします。

コードスニペット:

    If Range(x).Value =1 Then
        If Day(Range(a)) > Day(Range(b)) Then
           Range(z).Value = DateSerial(Year(Range(a)), Month(Range(a)), Day(Range(a)-1)) + TimeSerial(20,0,0)
        Else
           Range(z).Value = DateSerial(Year(Range(a)), Month(Range(a)), Day(Range(a))) + TimeSerial(20,0,0)
        End If
    ElseIf Range(y).Value =1 Then
        Range(z).Value = DateSerial(Year(Range(a)), Month(Range(a)), Day(Range(a)-1)) + TimeSerial(8,0,0)
    Else
        Range(z).Value = Range(a).Value
    End If
4

2 に答える 2

2

あなたのコードは良いです。範囲の 1 つが無効なデータを指しているという問題があるか、モジュールが破損しています。

ムルールをテキスト ファイルにエクスポートし (VBA エディタでモジュールを右クリック -> エクスポート)、クリーンなワークブックにインポートすることで、破損を処理できます。

于 2013-02-22T03:32:09.707 に答える
1

私にとっては問題ないようです。

コードをより簡潔にするためにデフォルトのプロパティが作成されていることは知っています。また、オブジェクトを親オブジェクトで完全に修飾する必要VBAがないことも理解していますが、コンパイラを常に信頼しているわけではないので、私のバージョンはあなたのものより少し長いです (私は'テストにセルC1を使用しました):C5

Option Explicit

Sub FullyQualified()

With Excel.ThisWorkbook.Sheets("Sheet1")
    If .Range("C1").Value = 1 Then
        If Day(.Range("C3").Value) > Day(.Range("C4").Value) Then
           .Range("C5").Value = DateSerial(Year(.Range("C3").Value), Month(.Range("C3").Value), Day(.Range("C3").Value - 1)) + TimeSerial(20, 0, 0)
        Else
           .Range("C5").Value = DateSerial(Year(.Range("C3").Value), Month(.Range("C3").Value), Day(.Range("C3").Value)) + TimeSerial(20, 0, 0)
        End If
    ElseIf .Range("C2").Value = 1 Then
        .Range("C5").Value = DateSerial(Year(.Range("C3").Value), Month(.Range("C3").Value), Day(.Range("C3").Value - 1)) + TimeSerial(8, 0, 0)
    Else
        .Range("C5").Value = .Range("C3").Value
    End If
End With

End Sub
于 2013-02-22T07:58:07.930 に答える