Vba 远程服务器计算机不存在或不可用(错误#462)

Vba 远程服务器计算机不存在或不可用(错误#462),vba,ms-access,automation,outlook,ms-access-2007,Vba,Ms Access,Automation,Outlook,Ms Access 2007,所以我在Mcirosoft Outlook中有这段代码。该代码在收到新邮件时运行,并根据发件人的姓名和附件保存文本文件,将数据导入2个access数据库,并运行数据库中预先构建的某些查询。当收到两封来自正确发件人且具有正确附件的电子邮件时,代码会出错。代码正确地处理了第一封电子邮件,但是当处理第二封电子邮件时,代码错误在下面粗体的一行 Option Explicit Private Sub Application_NewMail() Dim ns As NameSpace Dim inbox

所以我在Mcirosoft Outlook中有这段代码。该代码在收到新邮件时运行,并根据发件人的姓名和附件保存文本文件,将数据导入2个access数据库,并运行数据库中预先构建的某些查询。当收到两封来自正确发件人且具有正确附件的电子邮件时,代码会出错。代码正确地处理了第一封电子邮件,但是当处理第二封电子邮件时,代码错误在下面粗体的一行

Option Explicit
Private Sub Application_NewMail()

Dim ns As NameSpace
Dim inbox As MAPIFolder
Dim Item As MailItem
Dim atmt As Attachment
Dim fso As FileSystemObject
Dim fs As TextStream
Dim dt, invfn, misfn, invdr, misdr, dbfn As String
Dim invt, mist As Boolean
Dim db As Object

Set ns = GetNamespace("MAPI")
Set inbox = ns.GetDefaultFolder(olFolderInbox)
Set fso = New FileSystemObject

If inbox.UnReadItemCount = 0 Then
    Exit Sub
    Else
    For Each Item In inbox.Items.Restrict("[UnRead] = True")
        If Item.SenderName = "Menon, Jayesh" Then
            dt = Left(Right(Item.Subject, 12), 10)
            For Each atmt In Item.Attachments
                If atmt.FileName = "InvalidLoans.txt" Then
                    invfn = "ERLMF_InvalidLoans_" & dt & ".txt"
                    invdr = "C:\Documents and Settings\U299482\Desktop\Data Drop\" & _
                    invfn
                    atmt.SaveAsFile invdr                    
                    Set fs = fso.OpenTextFile(invdr)
                    If fs.Read(23) = "Invalid Loans Count = 0" Then
                        invt = False
                        Else
                        invt = True
                    End If
                    fs.Close
                End If
                If atmt.FileName = "MissingLoans.txt" Then
                    misfn = "ERLMF_MissingLoans_" & dt & ".txt"
                    misdr = "C:\Documents and Settings\U299482\Desktop\Data Drop\" & _
                    misfn
                    atmt.SaveAsFile misdr
                    Set fs = fso.OpenTextFile(misdr)
                    If fs.Read(23) = "Missing Loans Count = 0" Then
                        mist = False
                        Else
                        mist = True
                    End If
                    fs.Close
                End If
            Next
            If invt = True Or mist = True Then
                Set db = CreateObject("Access.Application")
                dbfn = "C:\Documents and Settings\U299482\Desktop\Databases\BPDashboard.accdb"
                With db
                    .OpenCurrentDatabase dbfn, True
                    .Visible = True
                    If invt = True Then
                        .DoCmd.TransferText acImportDelim, "Lns_Spec", "Invalid_Lns", invdr, True
                    End If
                    If mist = True Then
                        .DoCmd.TransferText acImportDelim, "Lns_Spec", "Missing_Lns", misdr, True
                    End If
                    .Quit
                End With
                Set db = Nothing
            End If
            If invt = True Then
                Set db = CreateObject("Access.Application")
                dbfn = "C:\Documents and Settings\U299482\Desktop\Databases\CORE IDP.accdb"
                With db
                    .OpenCurrentDatabase dbfn, True
                    .Visible = True
                    **CurrentDb.Execute "A0_Empty_ERLMF_InvalidLoans_2013-04-02", dbFailOnError**
                    .DoCmd.TransferText acImportDelim, "Lns_Spec", "ERLMF_InvalidLoans_2013-04-02", invdr, True
                    CurrentDb.Execute "AppendERLMF", dbFailOnError
                    CurrentDb.Execute "FaxRF Crystal Append", dbFailOnError
                    .Quit
                End With
                Set db = Nothing
            End If
            Item.UnRead = False
        End If
    Next
End If

End Sub

我想你已经超过了
。执行
命令。您需要确保第一次执行在开始下一次执行之前完成。为了解决这个问题,我首先声明一个公共变量
执行
,然后将下面的代码移动到它自己的方法中

Sub Execute()

  Executing = True

  Set db = CreateObject("Access.Application")
  dbfn = "C:\Documents and Settings\U299482\Desktop\Databases\CORE IDP.accdb"
  With db
    .OpenCurrentDatabase dbfn, True
    .Visible = True
    CurrentDb.Execute "A0_Empty_ERLMF_InvalidLoans_2013-04-02", dbFailOnError
    .DoCmd.TransferText acImportDelim, "Lns_Spec", "ERLMF_InvalidLoans_2013-04-02", invdr, True
    CurrentDb.Execute "AppendERLMF", dbFailOnError
    CurrentDb.Execute "FaxRF Crystal Append", dbFailOnError
    .Quit
  End With
  Set db = Nothing

  Executing = False

End Sub
然后,在调用函数时,用一个循环将其包围起来,以测试执行的
是否为false

Do
  If Executing = False Then
    Execute
    Exit Do
  End If
Loop

你确定?因为代码在CurrentDB.Execute处出错。这只发生在db在第一封邮件中关闭后。你可能是对的。
CurrentDb.Execute
是否同步运行?当您单步执行代码时会发生什么?你能立即转到下一个语句吗?