2013-02-22 26 views
1

詳情: 在這一領域,我填補「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

回答

2

你的代碼是好的。要麼你有一個問題,其中你的一個範圍指向無效數據,或者你的模塊有損壞。

您可以通過將您的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

1

它似乎爲我測試罰款。

我知道默認屬性都爲了讓代碼更簡潔被創建,並且我意識到對象不應該需要要與其父對象完全合格的,但我並不總是信任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