【发布时间】:2016-04-05 09:53:16
【问题描述】:
我试图使用 SQL 查询将我的 excel 工作表用作表格。我写了以下代码:
Global objConn As ADODB.Connection
Global ConnString As String
Global SQL As String
Global objRS As ADODB.Recordset
Global masterFile As String
Public Sub XL_DB_connect()
Set objConn = New ADODB.Connection
masterFile = ThisWorkbook.Path & Application.PathSeparator & ThisWorkbook.Name
ConnString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & masterFile & ";" & _
"Extended Properties=""Excel 12.0;" & _
"HDR=Yes;"";"
objConn.ConnectionString = ConnString
objConn.Open
End Sub
Public Sub executeQuery()
objRS.Source = SQL
objRS.ActiveConnection = objConn
objRS.Open
End Sub
Public Sub XL_DB_relMem()
Set objRS = Nothing
Set objConn = Nothing
SQL = vbNullString
End Sub
Public Sub test()
Set objRS = New ADODB.Recordset
objRS.CursorLocation = adUseClient
SQL = "select PatientGID, count(LOT) from [Sheet1$] group by PatientGID"
Debug.Print SQL
Call XL_DB_connect
Call executeQuery
objRS.MoveFirst
Range("Output").Resize(10, 2).ClearContents
Range("Output").CopyFromRecordset objRS
End Sub
Sheet1 具有从单元格 A1 开始的以下列
患者GID
进展
很多
新LoT
loTF日期
实际方案
loTRegimenClass
进度类
PERMetFlag
在运行代码时,我收到以下错误:
“运行时错误'-2147467259 (80004005)'
'Sheet1$' 不是有效名称。确保它不包括 无效字符和标点符号,并且它不是太长”
【问题讨论】:
-
这很好,按照你的想法做,如果工作表实际上没有被称为
Sheet1,你只会看到这个错误,你确定是吗? (顺便说一句,您的测试使连接保持打开状态) -
我相信它就是这么叫的。还有其他我可能做错的事情吗?
-
你可能想要
Set objRS.ActiveConnection = objConn -
在哪个子程序中? XL_DB_relMem() ?
-
它按预期对我有用(Excel 2016)。尝试在这两个地方重命名工作表,看看会发生什么。
标签: sql excel runtime-error adodb vba