Excel VBA脚本:崩溃结束如果

详细信息: 在此段中,根据满足的条件,使用由'a'引用的单元格中的修改date值来填充由'z'引用的单元格。 代码崩溃在内部结束如果行。

代码片段:

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 

你的代码是好的。 要么你有一个问题,你的范围之一是指向无效的数据,或者你的模块损坏。

您可以通过将您的模块导出到文本文件(VBA编辑器 – >导出中的右键单击模块)来处理损坏,然后导入到干净的工作簿中。

它似乎为我testing罚款。

我知道为了使代码更加简洁,我们已经创build了默认的属性,我意识到对象不需要用父对象完全限定,但是我并不总是相信VBA编译器,所以我的版本比你的更长一些我已经使用单元格C1C5来testing):

 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