ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 在EXCEL中使用SQL语句查询集锦-持续更新中,敬请关注

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-20 10:34 | 显示全部楼层
本帖已被收录到知识树中,索引项:ADO技术
上传附件吧!最能说明问题

TA的精华主题

TA的得分主题

发表于 2013-6-20 11:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
期待持续更新···

TA的精华主题

TA的得分主题

发表于 2013-6-20 12:23 | 显示全部楼层
本帖最后由 wenvay 于 2013-6-20 12:36 编辑
opiona 发表于 2013-6-20 10:34
上传附件吧!最能说明问题







  1. Sub filter_remarks()
  2.   
  3.     Application.ScreenUpdating = False
  4.    
  5.     Dim cnn As Object, SQL$, myPath$, MyFile$, d
  6.     Dim wb As Workbook
  7.    
  8.     Set cnn = CreateObject("adodb.connection")
  9.     myPath = ThisWorkbook.Path & ""
  10.     MyFile = ThisWorkbook.Name
  11.    
  12.    
  13.    '以本EXCEL文件作为一个数据库
  14.    
  15.     cnn.Open "Provider=Microsoft.Ace.OLEDB.12.0;Extended Properties=Excel 12.0;IMEX=1;HDR=NO;Data Source=" & ThisWorkbook.FullName  '字符与数值混排 报错
  16.    
  17.     '筛选ALLDATA工作表 REMARK字段为空的数据
  18.    
  19.     SQL = "select * from [AllData$a2:s] where Remark is null or len(Remark)=0" '筛选条件Remark 为空 可以更改条件 如:Remark = A
  20.    
  21.    
  22.    ' Set wb = GetObject(myPath & MyFile)
  23.    Set wb = ThisWorkbook
  24.    
  25.     '将数据复制到工作表REMARKS
  26.    
  27.     With wb
  28.      .Worksheets("remarks").Range("a1").CurrentRegion.Offset(2).ClearContents
  29.      .Worksheets("remarks").Range("a3").CopyFromRecordset cnn.Execute(SQL)
  30.      .Worksheets("remarks").Activate
  31.      .Worksheets("remarks").Range("a3").Select
  32.     End With
  33.    
  34.     cnn.Close
  35.    ' wb.Close
  36.    
  37.     'Set wb = Nothing
  38.     Set cnn = Nothing
  39.    
  40. Application.DisplayAlerts = False
  41.      ThisWorkbook.Save
  42. Application.DisplayAlerts = True
  43.     Application.ScreenUpdating = True
  44. End Sub
复制代码
opiona,上传附件,代码如上。结果不如理想

要求条件:筛选p列为空的数据。
结果:筛选数据不全;数据超过65536后不能全部复制,b列跟I列日期格式不能转换。

remark筛选数据.part1.rar (1.91 MB, 下载次数: 98)

remark筛选数据.part3.rar (380.86 KB, 下载次数: 74)

remark筛选数据.part2.rar (1.91 MB, 下载次数: 102)


TA的精华主题

TA的得分主题

发表于 2013-6-20 12:34 | 显示全部楼层
本帖最后由 wenvay 于 2013-6-20 12:37 编辑

呵呵。。。ISAM问题已经解决,
Extended Properties=‘Excel 12.0;IMEX=1;HDR=YES’; CONECTION STRING需要添加单引号

附件要求错了。
筛选p列为空的数据

TA的精华主题

TA的得分主题

发表于 2013-7-4 11:16 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-7-4 12:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-7-6 20:54 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-7-6 22:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-7-7 15:20 | 显示全部楼层
我想请教个问题,在VBA中执行如下语句报错是什么原因?下面的SQL语句是没有错的,因为我执行语句输出后还放在了SQL SERVER里执行过,都可以通过,不知道为什么在EXCEL里不能通过,
能帮助看下么?
Sub 按钮1_Click()
    Set conn = CreateObject("adodb.connection")
  Dim sql  As String
    conn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName  'ThisWorkbook.FullName当前工作簿的名字   ActiveSheet.Name当前工作表的名字
    sql = "DECLARE @cmdText    VARCHAR(8000); " _
    & "DECLARE @tmpSql        VARCHAR(8000);  " _
    & "SET @cmdText = 'SELECT CONVERT(VARCHAR(10), 产品编码, 120) AS 产品编码,' + CHAR(10); " _
    & "SELECT @cmdText = @cmdText + ' CASE 业务类型   WHEN ''' + 业务类型 + ''' THEN SUM(数量) ELSE 0 END AS ''' + 业务类型+ ''',' + CHAR(10) " _
    & "FROM (SELECT DISTINCT 业务类型 FROM (select 客户名称,产品编码,数量, CONVERT(varchar(100), 日期,110)+业务类型 as 业务类型 from 数据库) as 数据库 ) T " _
    & "SET @cmdText = LEFT(@cmdText, LEN(@cmdText) -2) " _
    & "SET @cmdText = @cmdText + ' FROM (select 客户名称,产品编码,数量, CONVERT(varchar(100), 日期,110)+业务类型 as 业务类型 from 数据库) as 数据库     GROUP BY 产品编码, 业务类型 ';  " _
    & "SET @tmpSql ='SELECT 产品编码,' + CHAR(10);  " _
    & "SELECT @tmpSql = @tmpSql + ' ISNULL(SUM(' + 业务类型  + '), 0) AS ''' + 业务类型  + ''','  + CHAR(10)" _
    & "FROM  (SELECT DISTINCT 业务类型 FROM (select 客户名称,产品编码,数量, CONVERT(varchar(100), 日期,110)+业务类型 as 业务类型 from 数据库) as 数据库 ) T  " _
    & "SET @tmpSql = LEFT(@tmpSql, LEN(@tmpSql) -2) + ' FROM (' + CHAR(10);   "
    Cells(1, 1) = sql
    [c1].CopyFromRecordset conn.Execute(sql)
    conn.Close
End Sub

报表 - 副本.rar

12.29 KB, 下载次数: 51

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-7-7 21:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
SQL Server和Excel的SQL语句有差别
所以可能SQL Server中的再Excel不能用!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 09:07 , Processed in 0.033108 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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