excel vba sql 占用内存,因为如下查询的sql语句较多,每次运行完都要耗用很多内存,求高手指点。谢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了excel vba sql 占用内存,因为如下查询的sql语句较多,每次运行完都要耗用很多内存,求高手指点。谢相关的知识,希望对你有一定的参考价值。

Sub 自定义明细()
Dim sht As Worksheet
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim Sql$, E$, F$
Dim strcn As String
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

'总收入
strcn = "provider=microsoft.jet.oledb.4.0;extended properties='excel 4.0;hdr=yes';" _
& "data source=" & ThisWorkbook.Path & "\效益分析 基础数据.xlsm"

cn.Open strcn
Sql = "SELECT sum(结帐金额) FROM [辅检收入$] "
Sql = Sql + " where 年份='2012年'"
Sql = Sql + " and 核算科室名称='妇产科'"
Sql = Sql + " group by 月份"
Sql = Sql + " order by 月份"
rs.Open Sql, cn
Set sht = ActiveWorkbook.Worksheets("妇产科1")
ActiveWorkbook.Worksheets("妇产科1").[B3:B14].ClearContents
Sheets("妇产科1").[B3].CopyFromRecordset rs
rs.Close
cn.Close
Set cn = Nothing
Set rs = Nothing

MsgBox "查询完毕"
End Sub

参考技术A 就1条查询语句,怎么会太多呢,你的extended properties='excel 4.0 这个是不是有问题,怎么版本号是4.0

如何使用 SQL 查询来操作 Excel 数据?

【中文标题】如何使用 SQL 查询来操作 Excel 数据?【英文标题】:How to use SQL query to manipulate Excel data? 【发布时间】:2021-08-08 08:15:17 【问题描述】:

我正在尝试在 Excel 文件中按 SQL 语句执行分组。下面是excel表格。如何通过 VBA 通过 SQL 语句执行简单的分组以获取结果。

最终结果如下所示,

PS - 我不想使用 Pivot、Power 查询等方法。我需要在 excel 文件中使用 VBA 和 SQL。

示例 02 -

我在下面找到了简单的例子, https://***.com/a/45720915/5002322

我尝试复制这个,以便我可以使用相同的方法解决我的问题并感受一下。

使用示例 02

在这里我创建了一个名为“Book11.xlsx”的新excel文件并保存。

我在“Sheet2”中添加了 A1 = 1、A2 = 2 和 A3 = 3 的值。

创建了一个excel宏并在下面的代码中使用。

Public Sub OverkillSum()

    Dim connection As Object
    Set connection = CreateObject("ADODB.Connection")
    connection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                    "Data Source=" & ThisWorkbook.FullName & ";" & _
                    "Extended Properties=""Excel 8.0;HDR=Yes;"";"

    Dim recordset As Object
    Set recordset = connection.Execute("SELECT SUM(Values) As Total FROM [Sheet2$]")

    Sheet1.Range("A4").Value = recordset.Fields("Total").Value
    recordset.Close
    connection.Close

End Sub

当我运行宏时,我收到一条错误消息 “没有为一个或多个必需参数指定值”

我的excel文件表

【问题讨论】:

您不能使用 SQL 从 Excel 中查询 Excel 电子表格。请改用 PowerQuery。可以说,PowerQuery 比 SQL 更好,只是需要一些时间来适应。它也是第一个用于构建实际上并不可怕的查询的 GUI 编辑器(还有其他人记得 MSQUERY 吗?) 谢谢。我在读到我们可以使用 ADODB.Connection 来做到这一点,但我不明白。我想按功能自动化分组。我试图记录宏以使用电源查询,但似乎它没有以这种方式集成。我们可以使用 Power Query 将其自动化吗? 是的,可以通过ADODB 进行。你尝试了什么,你在哪里卡住了? @Storax 我尝试通过这个简单的示例来查看它是否有效***.com/a/45720915/5002322 在这里我创建了一个名为“Book11.xlsx”的新 Excel 文件并保存了它。我在“Sheet2”中添加了 A1 = 1、A2 = 2 和 A3 = 3 的值。创建了一个 excel 宏并将其中的代码复制过去。当我运行宏时,我收到一条错误消息“没有为一个或多个必需参数提供值” 请相应地编辑您的帖子 【参考方案1】:

为了让代码运行,您必须在 A 列中添加一个标题,即您的工作表应该是这样的

这在连接信息中用HDR=Yes声明,列的名称Values在SQL语句中使用SELECT SUM(Values) As Total FROM [Sheet2$]

更新代码以在编写结果时使用sheetname 而不是代号

Public Sub OverkillSum()

    Dim connection As Object
    Set connection = CreateObject("ADODB.Connection")
    connection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                    "Data Source=" & ThisWorkbook.FullName & ";" & _
                    "Extended Properties=""Excel 8.0;HDR=Yes;"";"

    Dim recordset As Object
    Set recordset = connection.Execute("SELECT SUM(Values) As Total FROM [Sheet2$]")

    Worksheets("Sheet1").Range("A4").Value = recordset.Fields("Total").Value
    recordset.Close
    connection.Close

End Sub

【讨论】:

谢谢。我已经完成了建议的更改。我现在可以运行它而不会出现任何错误。但是,我没有看到单元格 Sheet1!A4 中的输出。请您也可以在这里帮助我。 嗯,对我来说,代码按预期工作。输出在单元格 A4 的 Sheet1 上,不在 Sheet2 上! 我关闭了所有打开的工作表并再次尝试。我在 Sheet1.Range("A4").Value =recordset.Fields("Total").Value 处收到错误提示 - 运行时错误“424”需要对象 是的,您必须拥有代号为 Sheet1 的工作表。 第一个示例的 SQL 语句是 "SELECT Col1,Col2,Col3,Col4, Sum(Qty) as SumQty FROM [Sheet3$] GROUP BY Col1, Col2, Col3, Col4" PS 我懒得写完整的列名 ;-)

以上是关于excel vba sql 占用内存,因为如下查询的sql语句较多,每次运行完都要耗用很多内存,求高手指点。谢的主要内容,如果未能解决你的问题,请参考以下文章

从 Excel VBA 运行嵌套的 Access SQL 查询

excel 2010 vba。 sql查询列'like' vlookup

使用 VBA-Excel 跨多个数据库进行 SQL 查询

使用 VBA 在 Excel 中的 SQL 表上使用参数化查询

EXCEL VBA combobox 模糊查询触发后 退格键功能改变

改进 Excel VBA 中的 SQL 查询