我要做的就是在excel工作表上使用标准范围(例如,命名范围,甚至A1:F100),并在其中运行一些sql查询,然后返回一个记录集,我可以在VBA代码中逐步执行该记录集,甚至只是粘贴到同一工作簿中的其他工作表中。
使用ADODB是一个想法,但是如何设置连接字符串以指向当前工作簿中的某个范围?
我知道在使用Microsoft查询向导之前,这并不理想,但是可以使用。我似乎无法使它仅引用其他excel文件来引用工作表中的范围。
这是我剩下的功能。当我运行几次时,我的excel崩溃,并显示通常的资源不足错误消息。我已经从电子表格中删除了此功能,并且所有功能都可以无缝地多次运行,因此,这肯定是由此处的代码引起的。
我已经清理了所有对象(正确吗?)。有人有什么想法会出问题吗?连接字符串中是否可以进行某些调整,或者与GetRows方法返回的变量有关?
我正在使用MS ADO 2.8,并且也尝试过2.5具有相同的性能。
Function getTimeBuckets() As html" target="_blank">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部分的问题
我注意到您只需要今天的记录,因此您应该能够将sql修改为:
strSQL = "SELECT DISTINCT(Expiration) FROM [PositionSummaryTable] " _
& "where [Instrument Type] = 'LSTOPT' AND [Expiration]=#" _
& Format(Date(),"yyyy/mm/dd") & "#"
您尚未关闭连接:
cn.Close
接着
Set rs=Nothing
Set cn=Nothing
我试图从另一个表中创建一个子表,其中所有的姓氏字段排序为A-Z,其中有一个电话号码字段不是null。我可以用SQL很容易做到这一点,但是我不知道如何在Excel中运行SQL查询。我很想将数据导入postgresql,然后在那里查询,但这似乎有点过分。 对于我正在尝试做的事情,SQL查询可以做到这一点。这似乎太简单了,因为它是Excel本地无法完成的事情。如何在Excel中运行这样的SQL查询?
问题内容: 我刚刚(昨天)学会了使用“存在”而不是“输入”。 我对此有一些疑问: 1)据我所知,解释是: “这样做更好的原因是,将只返回匹配的值,而不是建立大量可能的结果列表” 。这是否意味着虽然第一个子查询可能返回900个结果,但第二个子查询仅返回1(是或否)? 2)过去,我曾在RDBMS中抱怨:“只能检索前1000行”,第二种方法可以解决该问题吗? 3)第二个子查询中别名的范围是什么?…别名仅
我想在工作簿工作表中选择特定范围的单元格。我目前能够将一个变量设置为下面一行的工作簿工作表。 我想更进一步,能够在工作表中选择一个单元格范围,这样我就可以在定义的范围内练习数据帧功能。我的某些范围的行值大于1000。如何为所需excel范围选择可变长度行值?
试图将一个范围从Sheet1复制到31张表上的相同范围,但仍然得到“运行时错误1004:工作表类的粘贴方法失败”,调试器指示是问题所在。我可以复制到一张单张没有问题,但不能复制到多张。我试着到处找,但不知道问题是什么(可能也很简单)。
问题内容: 我已经在这里和Google上进行了搜索,但仍然无法解决我的问题。我正在尝试在文件中等效地使用excel的命名范围。以下内容在excel中的VBA中可用,但无法在文件中使用。 因此,我尝试了不同的引用命名空间的变体,但是没有运气。 这就是我现在所拥有的: 其中涉及一些不同的变化:采用参数ByVal,使用rng代替DATA(字符串类型), 运行时出现错误消息: Microsoft(R)Wi
我正在尝试阅读大型Excel文件(大小约10MB,. xlsx)。 我正在使用下面的代码 但它显示了堆内存问题。 我还看到了StackOverflow的其他解决方案,其中一些是为了增加JVM,但我不想增加JVM。 问题1)我们不能使用,因为这仅用于编写或创建新工作簿。 我的唯一目标是获取工作表的命名范围的数量,工作表的总数及其大型Excel文件的工作表名称。