2013-09-24 58 views
0

我遇到了以下問題。當我運行下面的代碼時,我得到了由這個宏創建的114行的正確結果,並在此之後停止。我得到錯誤說「應用程序定義或對象定義的錯誤」,它指向這一行代碼。VBA宏隱藏故障

Range("O" & (i + 1)) = reportDate((i + 5) Mod 6) 

任何人都可以幫助我找到原因。這是代碼。 Thx尋求幫助。

Sub hmm() 

Application.ScreenUpdating = False 

Dim zakres As Integer 
Dim rfiNumber(5) As String 
Dim reportDate(5) As Date 
Dim reportName(5) As String 
Dim formName(5) As String 
Dim rest(7) As String 
Dim j As Integer 
Dim item As String 
Dim l As Integer 

Workbooks("EAP_ZESTAWIENIE_pits+covers.xls").Activate 
Worksheets("COVER").Select 

zakres = Application.WorksheetFunction.CountA(Range("I:I")) 

formName(0) = "MDT.CV.CDQ.0204" 
formName(1) = "MDT.CV.CDQ.0205" 
formName(2) = "MDT.CV.CDQ.0207" 
formName(3) = "MDT.CV.CDQ.0801" 
formName(4) = "MDT.CV.CDQ.0802" 
formName(5) = "MDT.CV.CDQ.0803" 

rest(0) = "CV" 
rest(1) = "'08" 
rest(2) = "'00" 
rest(3) = "'0005" 
rest(4) = "F17162" 
rest(5) = "S001" 
rest(6) = "PEK001" 
rest(7) = "CV-0800" 

j = 1 

For i = 1 To (zakres - 2) * 3 

If (((i + 6) Mod 6) = 1) Then 

Worksheets("COVER").Select 

item = Range("A" & (2 * j + 1)) 
itemDescription = Range("S" & (2 * j + 1)) 

rfiNumber(0) = Range("B" & (2 * j + 1)) 
rfiNumber(1) = Range("C" & (2 * j + 1)) 
rfiNumber(2) = " " 
rfiNumber(3) = " " 
rfiNumber(4) = Range("K" & (2 * j + 1)) 
rfiNumber(5) = Range("M" & (2 * j + 1)) 

reportDate(0) = Range("E" & (2 * j + 1)) 
reportDate(1) = Range("E" & (2 * j + 1)) 
reportDate(2) = Range("E" & (2 * j + 1)) 
reportDate(3) = Range("E" & (2 * j + 1)) 
reportDate(4) = Range("L" & (2 * j + 2)) 
reportDate(5) = Range("N" & (2 * j + 2)) 

reportName(0) = Range("F" & (2 * j + 1)) 
reportName(1) = Range("G" & (2 * j + 1)) 
reportName(2) = Range("H" & (2 * j + 1)) 
reportName(3) = Range("J" & (2 * j + 1)) 
reportName(4) = Range("L" & (2 * j + 1)) 
reportName(5) = Range("N" & (2 * j + 1)) 

j = j + 1 

End If 

Worksheets("import").Select 

Range("A" & (i + 1)) = rest(4) 
Range("B" & (i + 1)) = rest(5) 
Range("C" & (i + 1)) = item 
Range("D" & (i + 1)) = itemDescription 
Range("F" & (i + 1)) = rest(6) 
Range("G" & (i + 1)) = rest(7) 
Range("H" & (i + 1)) = rest(0) 
Range("I" & (i + 1)) = rest(1) 
Range("J" & (i + 1)) = rest(2) 
Range("K" & (i + 1)) = "'000" & ((i + 5) Mod 6) + 1 
Range("L" & (i + 1)) = formName((i + 5) Mod 6) 
Range("M" & (i + 1)) = rfiNumber((i + 5) Mod 6) 
Range("N" & (i + 1)) = "CertCode" & "CV08000" & (((i + 5) Mod 6) + 1) & reportName((i + 5) Mod 6) 
Range("O" & (i + 1)) = reportDate((i + 5) Mod 6) 

Next i 

End Sub 
+1

什麼是reportDate((I + 5)國防部6)的'值'在錯誤的時候? –

+0

他沒有提供任何數據。他剛纔打破了。 – grafter

+1

你知道如何使用「F8」 –

回答

0

在電子表格中,L40具有可在內部被解釋爲日期的日期值,但當放置在電子表格上,它不能被視爲一個用於在電子表格日期的dateserial。

在VBA:
日期變量,代表從0時的日期範圍從1月1日10012月31日9999和倍浮點數存儲爲IEEE 64位(8字節): 00至23:59:59。

的電子表格,日期必須是1900年1月1,12月31日之間,9999

由於L40包含08/07/213,這是有效的VBA,但在Excel。

而且,我會用Option Explicit - 我不得不定義2個變量來獲取代碼在我的配置上運行:

Dim i As Long 
Dim itemDescription As String 
+0

我檢查這個數據L40但不足夠仔細,沒有看到丟失的「0」的反饋。非常感謝您指出了這一點。 – grafter