ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > SQL in Excel > 如何让EXCEL中所有引入外部数据的透视表和SQL查询表自适应路径和文件名更改

如何让EXCEL中所有引入外部数据的透视表和SQL查询表自适应路径和文件名更改

作者:绿色风 分类: 时间:2022-08-18 浏览:110
楼主
whsfhwm
Q:如何让所有的引入外部数据的透视表和SQL查询表自适应路径和文件名更改
A:在工作簿Open事件中,调用如下宏可以实现:
  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 = ActiveWorkbook.FullName '获取当前活动工作簿的完全路径
  10. On Error Resume Next
  11. For Each Sht In ActiveWorkbook.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. End Sub

注:下面的示例中的透视表是在EXCEL2010下创建的,保存为EXCEL2003的文件格式。

如何让所有的引入外部数据的透视表和SQL查询表自适应路径和文件名更改.rar
2楼
ok22ko
我试了一下,还是不行,,,不知道怎么搞的,希望能有个视频动画,,
3楼
xpm130
博大精深呵~~~收藏备学。
4楼
水星钓鱼
我不太赞成用自适应代码,如果要用自适应代码还不如直接用ADO代替了。

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap