1

详细信息: 在此部分中,我将根据满足的条件,使用“a”引用的单元格中的修改日期值填充“z”引用的单元格。代码在内部 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

你的代码很好。您的某个范围指向无效数据时遇到问题,或者您的模块中有损坏。

您可以通过将您的穆勒导出到文本文件(在 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 回答