无法读取数据库或只读对象

我正在尝试使用VBA和ADO选项从另一个文件查询Excel文件。 当我运行这个代码时,它抛出了错误“不能更新,数据库或对象只读”:

Public Function fnExecuteXlQuery _ (ByVal strPath As String, _ ByVal strQuery As String) As ADODB.Recordset Dim rs As ADODB.Recordset Dim conStr As String On Error GoTo ErrorHandler conStr = "Provider=Microsoft.Jet.OLEDB.4.0; " _ & "Data Source=" & strPath & "; Extended Properties=Excel 8.0" Set rs = New ADODB.Recordset rs.Open strQuery, conStr, adOpenDynamic Set fnExecuteXlQuery = rs Exit Function ErrorHandler: Set fnExecuteXlQuery = Nothing fnDisplayError Error(Err) & "Unable to fetch data from DTS...", ERROR_TYPE_ERROR End Function 

strPath ”是源Excel文件,“ strquery ”具有以下SQL代码:

 Select [Activity],[Name],[Date],[Hours Spent] from [Time sheet$] where [Activity] = 'Billable Activities' Order by Name,date 

也许所有在评论中所说的内容都需要再次写出来,以确保你确实得到了正确的解决scheme:

 Option Explicit Public Sub ConnectionToExcel() Dim rstResult As ADODB.Recordset Dim strConnectin As String Dim strPath As String Dim strSQL As String strPath = "C:\Data\YourFile.xlsm" strConnectin = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source='" & strPath & "';Extended Properties=""Excel 12.0 XML;HDR=YES;IMEX=1"" " Debug.Print strConnection strSQL = "SELECT * FROM [Time sheet$] " Set rstResult = New ADODB.Recordset rstResult.Open strSQL, strConnectin, adOpenForwardOnly, adLockReadOnly, adCmdText Sheet1.Range("A1").CopyFromRecordset rstResult End Sub 

请注意,我正在一步一个脚印:(1)我正在使用一个sub而不是一个函数。 (2) select已被简化以testing连接,并且可以稍后扩展。 (3)将结果写回第一张。 (4)进一步限制logging集只有adOpenForwardOnlyadLockReadOnly

此外,请记住,上述代码使用早期绑定,因此需要您在Tools – > References...设置对Microsoft ActiveX Data Objects 2.8 Library (或更高版本)的References...