安装Office 2007后编译VBA应用程序时出错

时间:2010-04-22 13:38:11

标签: vba office-2007

自从我们安装Office 2007以来,我们的VBA应用程序代码停止了工作。当我调试时,我收到编译错误并突出显示.Edit。我用.Edit替换.Update并且我没有得到任何调试错误,但是当我运行代码时,我得到了类型不匹配错误代码。有什么我做错了吗?

以下是代码:

Private Sub Command290_Click()
On Error GoTo Err_Command290_Click
'This routine imports the latest Changepoint CSV file into the ChangepointCSV table.
'SR: valid routine

    Dim FullFileName As String      'full file path & name
    Dim myDB As Database
    Dim rstAsOfDate As Recordset
    Dim rstCumulativeResources As Recordset
    Dim strOldDate As String
    Dim tableExists As Integer
    Dim strExistingCSVTable As String
    Dim transferSuccessful As String
    Dim deleteBackup As Boolean

'set default values
    Set myDB = CurrentDb
    strExistingCSVTable = "ChangepointCSV"

'form maintenance to restrict user options
    DoCmd.Close acForm, "frmMain", acSaveNo
    DoCmd.OpenForm "frmImportingCPData"

'get name of the existing CSV file
    'MsgBox ("before RS set")
    Set rstAsOfDate = myDB.OpenRecordset("tblChangepointFileName")
    'MsgBox ("after RS set")

    With rstAsOfDate
        'MsgBox ("inWITH")
       .Edit
        'Store original data.
        strOldDate = !CurrentFileName
    End With

    rstAsOfDate.Close

'get name of file to be imported
    FullFileName = GetFile()
    'MsgBox ("DEBUG  FullFileName = " + FullFileName)

    'FullFileName = "C:Documents and Settings ext.xlsx"

'compare existing to latest
    If strOldDate = FullFileName Then
        MsgBox "The RI currently contains the latest Changepoint data extract."
        deleteBackup = False
        GoTo RestoreForms
    End If

'if Changepoint CSV table exists then back it up in case of an error
    tableExists = ObjectExists_20%("Tables", strExistingCSVTable)

    If tableExists = -1 Then
        DoCmd.CopyObject , "ChangepointCSV-backup", acTable, strExistingCSVTable
        DoCmd.DeleteObject acTable, strExistingCSVTable
    End If

'transfer the latest CSV file
    transferSuccessful = TransferSpreadsheetFile(strExistingCSVTable, FullFileName)
    'MsgBox ("DEBUG:  Transfer Successful:  " + transferSuccessful)

'if the lastest CSV file was NOT imported, restore the backup CSV and exit,
'else continue processesing.

    If transferSuccessful = 0 Then
        DoCmd.CopyObject , strExistingCSVTable, acTable, "ChangepointCSV-backup"
        MsgBox "The Changepoint data could not be refreshed at this time.  Please try again later."
        deleteBackup = True
        GoTo RestoreForms:
    Else
        'MsgBox ("before RS set")
        Set rstAsOfDate = myDB.OpenRecordset("tblChangepointFileName")
        'MsgBox ("after RS set")

        'Update Filename
            With rstAsOfDate
                'MsgBox ("inWITH")
                .Edit
                'Store original data
                !CurrentFileName = FullFileName
                .Update
            End With

        rstAsOfDate.Close
        'MsgBox ("RS closed")

        Set rstCumulativeResources = myDB.OpenRecordset("tbl_CumulativeResources")
        Do While Not rstCumulativeResources.EOF
            rstCumulativeResources.Delete
            rstCumulativeResources.MoveNext
        Loop

        rstCumulativeResources.Close

        DoCmd.RunMacro "mcrFTEAnalysis"
        deleteBackup = True
        GoTo RestoreForms

    End If

'restores main form and cleans up backup file
RestoreForms:
    If deleteBackup = True Then
        DoCmd.DeleteObject acTable, "ChangepointCSV-backup"
    End If

    DoCmd.Close acForm, "frmImportingCPData", acSaveNo
    'MsgBox ("DEBUG:  import form closed")
    DoCmd.OpenForm "frmMain", acNormal

Exit_Command290_Click:
    Exit Sub

Err_Command290_Click:
    MsgBox Err.Description
    Resume Exit_Command290_Click
End Sub

1 个答案:

答案 0 :(得分:2)

我的第一个猜测是参考问题。您是否使用DAO或ADO进行数据访问?检查参考文献后,如果使用DAO,则尝试将DIM行更改为DAO.Database等(如果使用ADO,则将其更改为ADO。

因为DAO和ADO都包含.Database对象,VBA有时会混淆你的意思和默认值从内存版本到版本