从 ODBC 切换到 OLEDB 并获得 "Object Required"

Switching from ODBC to OLEDB and getting "Object Required"

我的任务是修改一些 VBA 代码以从使用 ODBC 连接切换到使用 OLEDB 连接,这样我们就可以将用户名和密码编码到子例程中。

我当然没有这方面的经验,但我想我已经设法为新的 OLEDB 连接获取了正确的连接字符串。

我已经在独立测试子中测试了连接字符串,它工作正常。

我正在尝试替换代码中以前的 ODBC 连接字符串,但我开始得到 "Run-time error '424' Object required"

这是我目前正在尝试开始工作的子程序:

Sub getdata()
Dim tableName As String
Dim tableRecords As New ADODB.Recordset
Dim Cnxn2 As ADODB.Connection 

tableName = "TABLE_NAME"

Set Cnxn2 = New ADODB.Connection

'Old Connection String Using ODBC
'Cnxn2.ConnectionString = "Data Source='DATASOURCE';" '& "Integrated Security = SSPI;"

'New Connection String Using OLEDB
Cnxn2.ConnectionString = "Provider=sqloledb;Data Source=SERVER\INSTANCE;User ID=USER;Password=PASSWORD;"

Cnxn2.ConnectionTimeout = 30
Cnxn2.Open
tableRecords.Open tableName, Cnxn2, adUseClient, adLockOptimistic, adCmdTable

With tableRecords
ReturnData.Range("A1").CopyFromRecordset tableRecords(10)

.Close
End With
        Cnxn2.Close

        Set Cnxn2 = Nothing
        Set tableRecords = Nothing
    End Sub

错误是突出显示 "ReturnData.Range("A1").CopyFromRecordset tableRecords(1)

当我只更改了连接字符串时,为什么会出现 Object Required 错误?

注意:在另一个位置的代码中有一个非常相似的 sub,我只是从前面提到的行中删除了 "ReturnData.",它似乎开始工作了。如果我在这里这样做,我会得到这个: 运行-时间错误“430”:Class不支持自动化或不支持预期的界面

对于为什么切换到 OLEDB 会破坏此 sub 的任何帮助都非常感谢。

你的代码 ReturnData 没有被创建或任何东西,除非你在其他地方声明它是全局变量。我想你是在 Excel 中这样做的。在这种情况下替换 ReturnData.Range("A1").CopyFromRecordset tableRecords(10)

activeworkbook.sheets("Sheet1").Range("A1").CopyFromRecordset tableRecords(10)

编辑。设法复制它然后修复它。试试这个。

替换ReturnData.Range("A1").CopyFromRecordset tableRecords(10)

activeworkbook.sheets("Sheet1").Range("A1").CopyFromRecordset tableRecords