VBA宏隐藏故障

时间:2013-09-24 14:18:25

标签: excel vba excel-vba runtime-error

我遇到了以下问题。当我运行下面的代码时,我得到的结果是由这个宏创建的114行的正确结果,之后它被停止了。我收到错误说"应用程序定义或对象定义错误"它指向这一行代码。

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

任何人都可以帮我找到这个原因。这是代码。感谢任何帮助。

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 个答案:

答案 0 :(得分:0)

在电子表格中, L40 的日期值可以在内部解释为日期,但是当放在电子表格上时,它无法被识别为用于电子表格日期的日期序列

在VBA中


日期变量存储为IEEE 64位(8字节)浮点数,表示从 1月1日 9999年12月31日以及从0:00开始的日期:00:23:59:59。

在电子表格上,日期必须介于1900年1月1日至9999年12月31日之间。

由于L40包含08/07/213,因此对于vba有效,但对于excel则无效。

另外,我会使用Option Explicit - 我必须定义2个变量才能让代码在我的配置中运行:

Dim i As Long
Dim itemDescription As String