ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 怎么用VBA实现跨工作簿匹配

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-8-14 17:58 | 显示全部楼层 |阅读模式
image.png 怎么用VBA实现跨工作簿匹配

跨工作簿--匹配.rar

17.33 KB, 下载次数: 248

TA的精华主题

TA的得分主题

发表于 2020-8-14 18:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主同一问题又新开一贴是什么意思?

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-8-14 21:55 | 显示全部楼层
原来的帖子中很多坛友灰给了你代码,你置之不理,有新开一贴,什么意思嘛?这是对别人不尊重,以后还想别人帮你吗

TA的精华主题

TA的得分主题

发表于 2020-8-15 20:58 | 显示全部楼层
  1. Option Explicit

  2. Sub test1()
  3.   Dim f$
  4.   'f = ThisWorkbook.Path & Application.PathSeparator & "1.xlsx"  '指定 工作簿
  5.   With Application.FileDialog(msoFileDialogOpen)                 '选择 工作簿
  6.     .InitialFileName = ThisWorkbook.Path
  7.     With .Filters
  8.       .Clear
  9.       .Add "Excel Files", "*.xls?"
  10.     End With
  11.     .AllowMultiSelect = False
  12.     If .Show Then f = .SelectedItems(1) Else Exit Sub
  13.   End With
  14.   Dim Cn As Object, Sq$(2)
  15.   Set Cn = CreateObject("ADODB.Connection")
  16.   Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=no';Data Source=" & ThisWorkbook.FullName
  17.   Sq(0) = "[" & ActiveSheet.Name & "$E2:E" & Cells(Rows.Count, 5).End(xlUp).Row & "]a"
  18.   Sq(1) = "[Excel 12.0;HDR=no;Database=" & f & "].[$A2:Y]b"
  19.   Sq(2) = "SELECT b.f1,b.f2,b.f3,b.f4 FROM " & Sq(0) & " LEFT JOIN " & Sq(1) & " ON a.f1=b.f19"
  20.   Range("F2").CopyFromRecordset Cn.Execute(Sq(2))
  21.   Cn.Close: Set Cn = Nothing
  22.   MsgBox " ok!", 64
  23. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2021-9-20 10:07 | 显示全部楼层
各位大哥大姐我刚开始接触VBA我想知道4楼师傅的代码里修改哪里可以变化另一个工作簿里匹配列位置,修改哪里可以改变本工作簿咧列位置,原来使用公式看的懂,这个我真的看不懂
Option Explicit

Sub test1()
  Dim f$
  'f = ThisWorkbook.Path & Application.PathSeparator & "1.xlsx"  '指定 工作簿
  With Application.FileDialog(msoFileDialogOpen)                 '选择 工作簿
    .InitialFileName = ThisWorkbook.Path
    With .Filters
      .Clear
      .Add "Excel Files", "*.xls?"
    End With
    .AllowMultiSelect = False
    If .Show Then f = .SelectedItems(1) Else Exit Sub
  End With
  Dim Cn As Object, Sq$(2)
  Set Cn = CreateObject("ADODB.Connection")
  Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=no';Data Source=" & ThisWorkbook.FullName
  Sq(0) = "[" & ActiveSheet.Name & "$E2:E" & Cells(Rows.Count, 5).End(xlUp).Row & "]a"
  Sq(1) = "[Excel 12.0;HDR=no;Database=" & f & "].[$A2:Y]b"
  Sq(2) = "SELECT b.f1,b.f2,b.f3,b.f4 FROM " & Sq(0) & " LEFT JOIN " & Sq(1) & " ON a.f1=b.f19"
  Range("F2").CopyFromRecordset Cn.Execute(Sq(2))
  Cn.Close: Set Cn = Nothing
  MsgBox " ok!", 64
End Sub

TA的精华主题

TA的得分主题

发表于 2021-9-20 13:47 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
hjahua 发表于 2021-9-20 10:07
各位大哥大姐我刚开始接触VBA我想知道4楼师傅的代码里修改哪里可以变化另一个工作簿里匹配列位置,修改哪里 ...

Sq(0) = "[" & ActiveSheet.Name & "$E2:E" & Cells(Rows.Count, 5).End(xlUp).Row & "]a"
  Sq(1) = "[Excel 12.0;HDR=no;Database=" & f & "].[$A2:Y]b"
  Sq(2) = "SELECT b.f1,b.f2,b.f3,b.f4 FROM " & Sq(0) & " LEFT JOIN " & Sq(1) & " ON a.f1=b.f19"
可能是这里,具体位置,需要上传附件的。

TA的精华主题

TA的得分主题

发表于 2023-4-25 13:44 | 显示全部楼层

大神这三个sql能不能给下注释,想学习看不太懂

TA的精华主题

TA的得分主题

发表于 2023-4-25 20:29 | 显示全部楼层
这段程序代码是一个用于 Excel VBA 的 SQL 查询语句,它的主要作用是将两个数据表连接起来进行查询,其中:


Sq(0) = "[" & ActiveSheet.Name & "$E2:E" & Cells(Rows.Count, 5).End(xlUp).Row & "]a":
定义了第一个数据表的范围,它包括了当前工作表的 E 列(从第 2 行到最后一行)。

Sq(1) = "[Excel 12.0;HDR=no;Database=" & f & "].[$A2:Y]b":
定义了第二个数据表的范围,它是一个外部的 Excel 档案,文件名储存在变量 f 中,范围包括了从 A2 到 Y 列的所有数据。

Sq(2) = "SELECT b.f1,b.f2,b.f3,b.f4 FROM " & Sq(0) & " LEFT JOIN " & Sq(1) & " ON a.f1=b.f19":
这是一个 SQL 语句,它使用了两个数据表进行连接,并选择了一些字段进行查询。
其中,"SELECT b.f1,b.f2,b.f3,b.f4" 表示选择第二个数据表中的 f1、f2、f3 和 f4 四个字段,"FROM " & Sq(0) & " LEFT JOIN " & Sq(1) & " ON a.f1=b.f19" 表示从两个数据表进行左连接,并以第一个数据表中的 f1 字段和第二个数据表中的 f19 字段进行连接。最后,整个 SQL 语句被储存在 Sq(2) 这个变量中。


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 09:49 , Processed in 0.042703 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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