我怎样才能在一个Excel表格命名的范围内运行SQL语句?
我所要做的就是在Excel工作表(即一个命名的范围,甚至A1:F100)上取一个标准范围,然后在其上运行一些sql查询,并返回一个logging集,我可以在VBA代码中步入,甚至只需粘贴到同一工作簿中的其他工作表即可。
使用ADODB是一个想法,但我怎么能设置连接string指向当前工作簿中的一些范围?
我知道之前,我已经使用了微软查询向导,这是不理想的,但将工作。 我似乎无法得到这个引用表单内的范围,只有其他的Excel文件。
这是我留下的function。 当我运行它几次我的Excel崩溃与通常的资源错误信息。 我已经从电子表格中删除了这个函数,并且所有东西都可以无缝地运行多次,所以这里肯定是由代码造成的。
我清理了所有的对象(正确?)。 有没有人有任何想法可能会出错? 连接string中是否有可以调整的东西,或者是否可以与从GetRows方法返回的变体有关?
我正在使用MS ADO 2.8,也尝试2.5具有相同的行为。
Function getTimeBuckets() As Collection Dim strFile As String Dim strCon As String Dim strSQL As String Dim dateRows As Variant Dim i As Integer Dim today As Date Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") Set getTimeBuckets = New Collection strFile = ThisWorkbook.FullName strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _ & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";" cn.Open strCon strSQL = "SELECT DISTINCT(Expiration) FROM [PositionSummaryTable] where [Instrument Type] = 'LSTOPT'" rs.Open strSQL, cn dateRows = rs.GetRows rs.Close 'today = Date today = "6-may-2009" For i = 1 To UBound(dateRows, 2) If (dateRows(0, i) >= today) Then getTimeBuckets.Add (dateRows(0, i)) End If Next i Set dateRows = Nothing Set cn = Nothing Set rs = Nothing End Function
你可以使用这个名字。
Dim cn As ADODB.Connection Dim rs As ADODB.Recordset strFile = Workbooks(1).FullName strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _ & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";" Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") cn.Open strCon ''Pick one: strSQL = "SELECT * FROM DataTable" ''Named range strSQL = "SELECT * FROM [Sheet1$A1:E346]" ''Range rs.Open strSQL, cn Debug.Print rs.GetString
回答问题第2部分
我注意到你只需要今天的logging,所以你应该可以修改sql来:
strSQL = "SELECT DISTINCT(Expiration) FROM [PositionSummaryTable] " _ & "where [Instrument Type] = 'LSTOPT' AND [Expiration]=#" _ & Format(Date(),"yyyy/mm/dd") & "#"
您尚未closures连接:
cn.Close
接着
Set rs=Nothing Set cn=Nothing
如何使用LIKE子句?
我试着用:
select * from [PES$] where PID_TAG like '*5400001'
没有成功….
这工作:
select * from [PES$] where PID_TAG = 'PIT5400001'
但这不是我想要的。
编辑
嗯….我们需要改变通配符工作…不要使用*,使用%
你会发现所有你需要在下面:
第一个链接是VB.NET,链接2-6是VBA。
一
二
三
四
五
六
find所有在谷歌,约2 – 4分钟。
我不知道VBA,但在Delphi和C#中有使用该格式的代码
SELECT * FROM [SheetName$A1:B2]
你试过了吗?
如果您使用的是PowerShell,$是一个内部字符。 使用`$
例如:
"Select * from [VM`$A3:F30]"