Excel的VBA脚本:崩溃的结束如果

问题描述:

详情: 在这一领域,我填补“Z”与由“A”引用单元格修改日期值引用的单元格,根据条件满足。该代码崩溃在内部结束如果线。Excel的VBA脚本:崩溃的结束如果

代码片段:

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 
+1

您的意见丹的答案听起来更像是一个无限循环,我 - 是有没有解决任何代码循环提供? – 2013-02-22 06:53:30

+0

其他东西必须在后台编译器 – whytheq 2013-02-22 08:00:29

+0

嗨,为什么我一次一步地执行代码,似乎没有花费很长时间在任何一行代码上。我无法确定。我必须提到的行数是13500.但是,为什么从一天到下一天呢?它可能是我的机器,联想X61? – Selvam 2013-02-25 01:49:39

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

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

+0

崩溃是否意味着它不会产生VBA错误消息,它只是彻底崩溃了Excel? – 2013-02-22 05:17:25

+0

我没有将脚本保存在工作簿中。我将粘贴复制到宏编辑器以便每次运行新鲜。我注意到它停止的单元每次都不一样。我也检查了代码中的单元格引用。他们是正确的。 – Selvam 2013-02-22 06:06:24

+0

通过崩溃我的意思是挂起。我'esc'它,去调试器,其中黄色箭头指向发生问题的代码行。它确实填充目标列中的一系列单元格。 – Selvam 2013-02-22 06:08:57

它似乎为我测试罚款。

我知道默认属性都为了让代码更简洁被创建,并且我意识到对象不应该需要要与其父对象完全合格的,但我并不总是信任VBA编译器,我的版本是一点比你长(我用的细胞C1C5测试):

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