ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教:SQL查询自适应路径和文件名更改

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-12-20 10:48 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
EXCEL SQL导入外部数据(MS ACE OLEDB连接)移动工作薄后,不能刷新(不能适应路径变化)
示例1随便改变文件路径和名称,更改数据源后就能刷新得到最新结果,而示例2不行
里面有宏代码,不知道怎么修改,也能让示例2得到同样效果


TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-24 22:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
自己顶一下,,烦请坛友帮忙解决。谢谢。

TA的精华主题

TA的得分主题

发表于 2014-12-25 10:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
             附件呢?

TA的精华主题

TA的得分主题

发表于 2014-12-26 09:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请上传附件

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-27 21:10 | 显示全部楼层
重新上传附件,请老师们不吝赐教,谢谢。

请教:SQL查询自适应路径和文件名更改.rar

24.57 KB, 下载次数: 68

TA的精华主题

TA的得分主题

发表于 2014-12-28 14:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
在原来的基础上修改了一下
  1. '适用于本工作簿中所有工作表的SQL查询表,透视表采用引入外部数据方式对本工作簿中的连接
  2. '适应路径和文件名更改,但基本上不适用于SQL语句中带有路径名或文件名的情形,也不适用于引入其他工作簿的情形。

  3. Sub SQL表透视表适应路径和文件名更改()
  4.     Dim strCon As String, iPath As String
  5.     Dim i As Integer, j As Integer, iFlag As String, iStr As String
  6.     Dim iT As Integer, jT As Integer
  7.     Dim sht As Worksheet
  8.     '定义变量
  9.     iPath = ThisWorkbook.FullName                '获取本工作簿的完全路径
  10.     On Error Resume Next
  11.     For Each sht In ThisWorkbook.Worksheets

  12.         'SQL查询表的处理
  13.         i = sht.QueryTables.Count
  14.         If i > 0 Then
  15.             For j = 1 To i
  16.                 strCon = sht.QueryTables(j).Connection
  17.                 '遍历工作表中数据透视表中缓存连接信息赋值给变量strCon
  18.                 Select Case Left(strCon, 5)  'select case语句,条件为strCon变量中从左侧取5个字符
  19.                 Case "ODBC;"                 '判断缓存连接信息中的数据连接方式,如果是ODBC方式
  20.                     iFlag = "DBQ="           '将"DBQ=" 赋值给变量iFlag
  21.                 Case "OLEDB"                 '判断缓存连接信息中的数据连接方式,如果是OLEDB方式
  22.                     iFlag = "Source="            '将"DBQ=" 赋值给变量iFlag
  23.                 Case Else                    '没有引入外部数据或其他方式,不予处理
  24.                     Exit Sub
  25.                 End Select
  26.                 iStr = Split(Split(strCon, iFlag)(1), ";")(0)  '在变量strCon中截取文件路径信息
  27.                 With sht.QueryTables(j)      '替换SQL查询表中缓存信息中的文件完全路径
  28.                     .Connection = VBA.Replace(strCon, iStr, iPath)
  29.                     .CommandText = VBA.Replace(.CommandText, iStr, iPath)
  30.                 End With
  31.             Next j
  32.         End If

  33.         '数据透视表的处理
  34.         iT = sht.PivotTables.Count
  35.         If iT > 0 Then
  36.             For jT = 1 To iT
  37.                 strCon = sht.PivotTables(jT).PivotCache.Connection
  38.                 '遍历工作表中数据透视表中缓存连接信息赋值给变量strCon
  39.                 Select Case Left(strCon, 5)  'select case语句,条件为strCon变量中从左侧取5个字符
  40.                 Case "ODBC;"                 '判断缓存连接信息中的数据连接方式,如果是ODBC方式
  41.                     iFlag = "DBQ="           '将"DBQ=" 赋值给变量iFlag
  42.                 Case "OLEDB"                 '判断缓存连接信息中的数据连接方式,如果是OLEDB方式
  43.                     iFlag = "Source="            '将"DBQ=" 赋值给变量iFlag
  44.                 Case Else                    '没有引入外部数据或其他方式,不予处理
  45.                     Exit Sub
  46.                 End Select
  47.                 iStr = Split(Split(strCon, iFlag)(1), ";")(0)  '在变量strCon中截取文件路径信息
  48.                 With sht.PivotTables(jT).PivotCache     '替换据透视表缓存信息中的文件完全路径
  49.                     .Connection = VBA.Replace(strCon, iStr, iPath)
  50.                     .CommandText = VBA.Replace(.CommandText, iStr, iPath)
  51.                 End With
  52.             Next
  53.         End If
  54.     Next
  55.    
  56.     'SQL查询表的处理2
  57.     For Each Conn In ThisWorkbook.Connections
  58.         strCon = Conn.OLEDBConnection
  59.         '遍历SQL查询表中缓存连接信息赋值给变量strCon
  60.         Select Case Left(strCon, 5)  'select case语句,条件为strCon变量中从左侧取5个字符
  61.         Case "ODBC;"                 '判断缓存连接信息中的数据连接方式,如果是ODBC方式
  62.             iFlag = "DBQ="           '将"DBQ=" 赋值给变量iFlag
  63.         Case "OLEDB"                 '判断缓存连接信息中的数据连接方式,如果是OLEDB方式
  64.             iFlag = "Source="            '将"DBQ=" 赋值给变量iFlag
  65.         Case Else                    '没有引入外部数据或其他方式,不予处理
  66.             Exit Sub
  67.         End Select
  68.        With Conn.OLEDBConnection
  69.             .Connection = VBA.Replace(strCon, iStr, iPath)
  70.             .SourceDataFile = ThisWorkbook.FullName
  71.         End With
  72.     Next
  73. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-31 19:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
335081548老师,成功了,感激不尽。这个问题困扰我很久了。
原有的:SQL查询表的处理语句本身有问题吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-2 23:26 | 显示全部楼层
本帖最后由 yj0715 于 2015-1-3 18:56 编辑

本以为解决了,却是如下情况:
MS 2003默认的:Provider=Microsoft.Jet.OLEDB.4.0连接可以适应文件名更改和路径更改。
MS 2010默认的:Provider=Microsoft.ACE.OLEDB.12.0连接还是不行。附件如下: SQL查询自适应路径和文件名更改.rar (16.85 KB, 下载次数: 57)

TA的精华主题

TA的得分主题

发表于 2015-1-3 19:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
yj0715 发表于 2015-1-2 23:26
本以为解决了,却是如下情况:
MS 2003默认的:Provider=Microsoft.Jet.OLEDB.4.0连接可以适应文件名更改和 ...

感谢提供支持,其实我的意思是:《SQL查询自适应路径和文件名更改》只是对路径与工作簿名更改有效的;但对更改工作表名是无效的

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-3 19:35 | 显示全部楼层
张雄友 发表于 2015-1-3 19:27
感谢提供支持,其实我的意思是:《SQL查询自适应路径和文件名更改》只是对路径与工作簿名更改有效的;但对 ...

说的就是路径和工作薄(文件)名的更改自适应的问题。
经过反复测试,这个代更码只适用于2003 版本建立的外部连接,2010版本无法做到自适应路径和文件名变化
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-9 04:03 , Processed in 0.042380 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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