Access VBA

时间:2018-01-23 08:02:22

标签: excel access-vba runtime-error

我花了几个小时研究这个错误1004问题,但没有找到类似的情况。

在访问模块中,我有3个全局对象(仅在模块中为全局对象),如下所示:

Private objXLapp As Excel.Application
Private objXLworkbook As Excel.Workbook
Private objXLworksheet As Excel.Worksheet

所有都正确实例化。

我通过从模块中重复调用的函数将数据从表传输到电子表格中。例程的基本内容如下。

Private Function CreateLevel2(ByRef rstCASHFLOW As DAO.Recordset, ByRef currentRow As Long, colRef As String) As Boolean
    Const PROC_NAME = "CreateLevel2"

    On Local Error GoTo CatchAllErrors

    Do
Retry:
        objXLworksheet.Range("C" & currentRow - 1).Formula = rstCASHFLOW!PMTlevel2Code

        ... other code here

        rstCASHFLOW.MoveNext
    Loop Until rstCASHFLOW.EOF

Exit_Func:
    On Local Error GoTo 0
    Exit Function

CatchAllErrors:
    If Err.Number = 1004 then
        MsgBox "Press ok to continue"
        Goto Retry
    End If
    Set ErrorMessage.OrgError = err
    NewMsgBox eemUnknownError, MODULE_NAME, PROC_NAME
    Err.Clear
    Goto Exit_Func
End Function

Private Function CreateLevel1() As Boolean
    Const PROC_NAME = "CreateLevel1"

    On Local Error GoTo CatchAllErrors

    objXLworksheet.Range("B" & currentRow - 2).Formula = rstCASHFLOW!PMTlevel1Code

    … other code here

Exit_Func:
    On Local Error GoTo 0
    Exit Function

CatchAllErrors:
    Set ErrorMessage.OrgError = Err
    NewMsgBox eemUnknownError, MODULE_NAME, PROC_NAME
    Err.Clear
    GoTo Exit_Func
End Function

如果我删除" On Error"程序在代码行停止,为函数" CreateLevel2"中的工作表赋值。如果我检查所有变量,则没有丢失范围且有效。如果我告诉程序恢复,它会继续没有问题,并将正确的数据传输到电子表格。

如果我包含" On Error"为了捕获错误并弹出一个msgbox要求我继续(有效地暂停执行,直到我按下确定),代码继续没有任何问题。

这只是Access VBA的一些问题吗?

当错误发生时,变量currentRow为13,表变量rstCASHFLOW!PMTlevel2Code有一个值(一个字符串),rstCASHFLOW.EOF为false。 XL对象也可以。通过Watch Window查看显示对象引用都很好。

请注意,只有一个objXLapp,一个objXLworkbook和一个objXLworksheet。该工作簿仅包含1个工作表。

我完全被难过了!

任何人都可以帮忙......谢谢

0 个答案:

没有答案