繁体   English   中英

第二次在EXCEL中运行VBA代码时,出现“运行时错误462:远程服务器计算机不存在或不可用”(获取访问表)

[英]“Run-time error 462: The remote server machine does not exist or is unavailable” when running VBA code in EXCEL for a second time (get ACCESS table)

我在VBA EXCEL中有一个宏,它将打开一个访问文件并运行4个查询,关闭该访问文件,最后将一个表从ACCESS加载到EXCEL中。 我的问题是,当我第二次运行它时,出现运行时错误“ 462”。 我读到它与变量有关,我需要完全限定变量。 您能建议我如何分配变量吗?

    Sub open_Access()
    Application.ScreenUpdating = False

    Set xcess = New Access.Application

    xcess.Visible = True

    folderpath = ActiveWorkbook.Path
    objectname2 = folderpath & "\"
    fileName = "Merge17.accdb"
    objectname = objectname2 & fileName

    xcess.OpenCurrentDatabase (objectname)

    If Not IsNull(DLookup("Name", "MSysObjects", "Name='FinalTable' And Type In (1,4,6)")) Then
         'Table Exists

         DoCmd.DeleteObject acTable, "FinalTable"

    Else

     'Table not exists
     End If

    xcess.DoCmd.OpenQuery "start1a"
    xcess.DoCmd.OpenQuery "start1b"
    xcess.DoCmd.OpenQuery "start2"
    xcess.DoCmd.OpenQuery "start3"

    xcess.Quit

    Dim TextFileConn As ADODB.Connection
    Dim TextFileData As ADODB.Recordset
    Dim TextFileField As ADODB.Field

    Set TextFileConn = CreateObject("ADODB.Connection")
    Set TextFileData = CreateObject("ADODB.Recordset")

    TextFileConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & objectname

    TextFileConn.Open

    With TextFileData
    .ActiveConnection = TextFileConn
    .Source = "FinalTable"
    .LockType = adLockReadOnly
    .CursorType = adOpenForwardOnly
    .Open

    End With

    Worksheets.Add
    ActiveSheet.Name = "DATA from ACCESS"

    For Each TextFileField In TextFileData.Fields
        ActiveCell.Value = TextFileField.Name
        ActiveCell.Offset(0, 1).Select
    Next TextFileField

    Range("A1").Select
    Range("A2").CopyFromRecordset TextFileData
    Range("A1").CurrentRegion.EntireColumn.AutoFit

    TextFileData.Close
    TextFileConn.Close

    SecondsElapsed = Round(Timer - StartTime, 2)
    MsgBox ("Loading Data Complete! Time elasped: " & SecondsElapsed & " seconds")

    End Sub

那么,我该如何更改变量? 非常感谢你。

也许您可以尝试将DLookup的条件参数中的"Name='更改为"[Name]=' 编译器可能会认为Name是未定义的变量,而不是域中的引用变量。

我之所以这样说,是因为我有类似的代码,但适用于DCount函数: If DCount("PropertyID", "tbl_Properties", "[PropertyID] Like '*" & IDSearch & "*'") <> 0 Then ,还有示例Microsoft显示类似的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM