ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 361|回复: 1

利用Excel2010的SQL语言连接外部数据方法,直接使用VBA的SQL语言两种方法有何不同。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-7-24 13:14 | 显示全部楼层 |阅读模式




******************************
Excel中利用SQL语言连接外部数据-百度经验  https://jingyan.baidu.com/article/adc8151319a340b723bf7389.html



在【连接属性】对话框,切换到【定义】标签,在【命令文本】中输入如下语句:select * from [成绩表$],最后【确定】(此处命令文本中的代码是SQL的基本语句,虽然按照系统默认也可以获取外部数据,但此处是标准语法,方便后续对数据的进一步操作处理)







这样就能够在不打开外部数据源的情况下获取外部数据,而且当外部数据有更新时,我们只需要在此连接工作簿中右键【刷新】即可获得更新后的外部数据(不需要打开外部数据源)






image.jpg



image.jpg



****************************************************
在VBA中使用,SQL语言。


  1. Function SqlRetuRs(Str)
  2.    Dim Cn As ADODB.Connection
  3.        Set Cn = New ADODB.Connection
  4.    Dim Rs As ADODB.Recordset
  5.        Set Rs = New ADODB.Recordset
  6.         Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=yes';data source=" & ThisWorkbook.fullName
  7.         Rs.Open Str, Cn, adOpenKeyset, adLockOptimistic
  8.        Set SqlRetuRs = Rs
  9. End Function

  10. Sub lll1()
  11.    Dim Str, Rr
  12.    Dim Sht As Worksheet
  13.    Dim Rng As Range, oRng As Range
  14.        Set Rng = Selection
  15.        Set Rng = Rng.CurrentRegion
  16.        Debug.Print Rng.Address
  17.        Set Sht = Rng.Parent
  18.        Rr = Rng.Row + Rng.Rows.Count + 20
  19.        Set oRng = Sht.Range("A" & Rr - 5 & ":Z60000")
  20.        oRng.Select
  21.        oRng.Clear
  22.        Set oRng = Sht.Range("A1:G" & Rr)
  23.        oRng.Select
  24.       
  25.       
  26.    Dim Rs As Recordset, Rs1 As Recordset, Rs2 As Recordset
  27.    
  28.        Str = "Select Distinct 地点 From [" & Sht.Name & "$" & oRng.Address(0, 0) & "]  Where 地点 <> 'Null' "
  29.        Set Rs = SqlRetuRs(Str)
  30.       
  31.        With Rs
  32.            .MoveFirst
  33.            For ii = 0 To .RecordCount - 1
  34.                 Str = "Select  Sum(大小) From [" & Sht.Name & "$" & oRng.Address(0, 0) & "] Where 地点 = '" & .Fields(0) & "'"
  35.                 Set Rs1 = SqlRetuRs(Str)
  36.                 Str = "Select  Count(地点) From [" & Sht.Name & "$" & oRng.Address(0, 0) & "] Where 地点 = '" & .Fields(0) & "'"
  37.                 Set Rs2 = SqlRetuRs(Str)
  38.                 ''
  39.                 Sht.Cells(Rr, 2) = Rs.Fields(0)
  40.                 Sht.Cells(Rr, 3) = Rs2.Fields(0)
  41.                 Sht.Cells(Rr, 4) = Rs1.Fields(0)
  42.                 Rr = Rr + 1
  43.                 .MoveNext
  44.            Next ii
  45.        End With
  46. End Sub

复制代码

**************************



TA的精华主题

TA的得分主题

发表于 2023-7-24 14:22 | 显示全部楼层
没什么不同,全部用VBA只是自动化了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 07:49 , Processed in 0.027851 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表