cOr*_*ArY 16 sql excel vba excel-vba
我要做的就是在Excel工作表(即命名范围,甚至A1:F100)上采用标准范围,并在其上运行一些SQL查询,并返回一个我可以在VBA代码中单步执行的记录集,或者甚至只是粘贴到同一工作簿中的其他工作表中.
使用ADODB是一个想法,但我怎么能设置connectionstring指向当前工作簿中的某个范围?
我知道在使用Microsoft查询向导之前,这不是理想的,但可以使用.我似乎无法将此引用到工作表中的范围,只能引用其他excel文件.
这是我留下的功能.当我运行它几次我的excel崩溃与通常的资源外错误消息.我已从电子表格中删除了此功能,并且所有内容都无缝运行多次,因此肯定是由此处的代码引起的.
我已经清理了所有物体(正确吗?).有没有人有什么想法会出错?连接字符串中是否有可以调整的东西,或者它可能与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
Run Code Online (Sandbox Code Playgroud)
Fio*_*ala 19
你可以使用这个名字.
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
Run Code Online (Sandbox Code Playgroud)
回答问题第2部分
我注意到你只想要今天的记录,所以你应该能够将sql修改为:
strSQL = "SELECT DISTINCT(Expiration) FROM [PositionSummaryTable] " _
& "where [Instrument Type] = 'LSTOPT' AND [Expiration]=#" _
& Format(Date(),"yyyy/mm/dd") & "#"
Run Code Online (Sandbox Code Playgroud)
您尚未关闭连接:
cn.Close
Run Code Online (Sandbox Code Playgroud)
然后
Set rs=Nothing
Set cn=Nothing
Run Code Online (Sandbox Code Playgroud)