ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] Excel的SQL智能编辑器

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2022-11-13 16:19 | 显示全部楼层
wodewan 发表于 2022-11-13 14:49
Access我没用过,而且你做的是一个仓库管理系统,没办法回答你的问题,但你可以搜索下论坛,记得论坛里有 ...

好的,谢谢老师。

TA的精华主题

TA的得分主题

发表于 2022-11-14 18:50 | 显示全部楼层
wodewan 发表于 2022-11-13 14:49
Access我没用过,而且你做的是一个仓库管理系统,没办法回答你的问题,但你可以搜索下论坛,记得论坛里有 ...

老师。上面问的,left jion 匹配不到的,null,怎么定义字段啊,谢谢~

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-14 19:10 | 显示全部楼层
胖木瓜 发表于 2022-11-14 18:50
老师。上面问的,left jion 匹配不到的,null,怎么定义字段啊,谢谢~

这个编辑器用的是Excel、Acess的JET4.0和ACE12.0的引擎,如果你用sqlite或MySQL等其他数据库的语法,可能不适用。
SQL语句我可能都没你熟,具体的情况不太清楚,如果你是想选取null,可以加个条件语句: where 表.字段=null  试试。

TA的精华主题

TA的得分主题

发表于 2022-11-14 20:04 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
胖木瓜 发表于 2022-11-14 18:50
老师。上面问的,left jion 匹配不到的,null,怎么定义字段啊,谢谢~

咋匹配不到,建议上附件具体说明

TA的精华主题

TA的得分主题

发表于 2022-11-15 16:59 | 显示全部楼层
本帖最后由 胖木瓜 于 2022-11-15 17:00 编辑
zpy2 发表于 2022-11-14 20:04
咋匹配不到,建议上附件具体说明

大神,能帮忙看下这个问题,sql可以运行但是导入vba 报错 image.png
Sub SqlQuery()
    Dim conn As Object, rst As Object, strSQL$, i&, PathStr$, sht As Worksheet
    Set conn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.Recordset")
    PathStr = ThisWorkbook.FullName                                     '路径
    Select Case Application.Version * 1
        Case Is <= 11
            conn.Open "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" & PathStr & ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=0'"
        Case Is >= 12
            conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathStr & ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=0'"
    End Select
    strSQL = ""
SELECT iif(类型 is NULL,'B2B',类型) as 票类,iif(航司名称 is NULL,'国航',航司名称) as 航司名称,business_line,
SUM(应收receivable) As 应收供应receivable_supplier
FROM ((
SELECT * FROM [Excel 12.0;DATABASE=C:\Users\xiangming.jia\Desktop\疫情自动化-sql\QJD_BUSINESS.xlsx].[Sheet0$] where 业务类型check_type in ( '退票','二退','改后退' ) )A
LEFT JOIN( SELECT * FROM [Excel 12.0;DATABASE=C:\Users\xiangming.jia\Desktop\疫情自动化-sql\域名匹配.xlsx].[sheet0$] )B ON A.代理商域名domain = B.table_name) LEFT JOIN( SELECT * FROM [Excel 12.0;DATABASE=C:\Users\xiangming.jia\Desktop\疫情自动化-sql\域名匹配.xlsx].[sheet1$] )C ON A.代理商域名domain = C.航司域名 GROUP BY 类型,航司名称,business_line"
    rst.Open strSQL, conn, 1, 1
    '替换为对结果的处理-------------------------------------
    Set sht = Worksheets.Add(ActiveSheet)
    With sht
        For i = 0 To rst.Fields.Count - 1
            .Cells(1, i + 1) = rst.Fields(i).Name
        Next i
        .Range("a2").CopyFromRecordset rst
    End With
    rst.Close:    conn.Close:    Set conn = Nothing:    Set rst = Nothing
End Sub


image.png

TA的精华主题

TA的得分主题

发表于 2022-11-15 18:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zpy2 发表于 2022-11-14 20:04
咋匹配不到,建议上附件具体说明

大佬,能看下这个报错吗?sql可以跑,VBA报错了

SELECT IIF(B.航司名称 IS Not NULL,B.航司名称,IIF(C.航司名称 IS Not NULL,C.航司名称,IIF(D.航司名称 IS Not NULL,D.航司名称,IIF(E.航司名称 IS Not NULL,E.航司名称,'南航')))) AS 航司名称,IIF(差异原因mismatch_reason = '对账值不匹配','B表','P表') AS 类型,IIF(资金方向check_type = '收入','国内旗舰店','国内旗舰店') AS 业务线,IIF(核对状态check_status = '未核对','B2C','B2C') AS 票类,SUM(金额amount) AS amount
FROM ((((
  SELECT
            *        
        FROM
            [Excel 12.0;DATABASE=C:\Users\xiangming.jia\Desktop\疫情自动化-sql\QJD_PAYMENT.xlsx].[Sheet0$] )A
LEFT JOIN (SELECT  * FROM  [Excel 12.0;DATABASE=C:\Users\xiangming.jia\Desktop\疫情自动化-sql\域名匹配.xlsx].[sheet6$])B
ON A.备注ext_jsonremarkNew = B.MPPM账户)
LEFT JOIN (SELECT  * FROM  [Excel 12.0;DATABASE=C:\Users\xiangming.jia\Desktop\疫情自动化-sql\域名匹配.xlsx].[sheet6$] )C
ON A.支付公司ext_jsonsubBusinessObject = C.二字码)
LEFT JOIN (SELECT  * FROM [Excel 12.0;DATABASE=C:\Users\xiangming.jia\Desktop\疫情自动化-sql\域名匹配.xlsx].[sheet6$] )D
ON LEFT(A.交易流水号trade_no,3) = D.订单号前缀)
LEFT JOIN (SELECT  * FROM [Excel 12.0;DATABASE=C:\Users\xiangming.jia\Desktop\疫情自动化-sql\域名匹配.xlsx].[sheet3$] )E
ON LEFT(A.交易流水号trade_no,3) = E.三字代码
GROUP BY 差异原因mismatch_reason,核对状态check_status,资金方向check_type,IIF(B.航司名称 IS Not NULL,B.航司名称,IIF(C.航司名称 IS Not NULL,C.航司名称,IIF(D.航司名称 IS Not NULL,D.航司名称,IIF(E.航司名称 IS Not NULL,E.航司名称,'南航'))))


image.png

        

TA的精华主题

TA的得分主题

发表于 2022-11-16 10:33 来自手机 | 显示全部楼层
胖木瓜 发表于 2022-11-15 18:16
大佬,能看下这个报错吗?sql可以跑,VBA报错了

SELECT IIF(B.航司名称 IS Not NULL,B.航司名称,IIF(C ...

是不是sql里有回车换行?

把sql保存在 sql.txt里,然后用fso对象读取到字符串变量sql,在试试。

TA的精华主题

TA的得分主题

发表于 2022-11-16 11:08 | 显示全部楼层
zpy2 发表于 2022-11-16 10:33
是不是sql里有回车换行?

把sql保存在 sql.txt里,然后用fso对象读取到字符串变量sql,在试试。

然后用fso对象读取到字符串变量sql  这个不会

TA的精华主题

TA的得分主题

发表于 2023-7-2 21:56 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-7-3 08:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
为啥提示有木马呀
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 14:50 , Processed in 0.035123 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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