PivotTable之数据源和透视表随意移动更名也能刷新数据

 从此以后只要让数据源和查询的数据透视表文件在同一个文件夹里面(可更改文件夹名),那么就可以随意刷新数据,而不必担心需要更换外部数据源路径了。

以下为代码(包括注解运作原理)

Private Sub Workbook_Open()
    Dim strCon As String, iPath As String, i As Integer, iFlag As String, iStr As String
    strCon = ActiveSheet.PivotTables(1).PivotCache.Connection
    MsgBox (strCon)                                     '这里先查看一下这个数据透视表的连接信息。
    Select Case Left(strCon, 5)
    Case "ODBC;"
        iFlag = "DBQ="
    Case "OLEDB"
        iFlag = "Source="
    Case Else
        Exit Sub
    End Select
    iStr = Split(Split(strCon, iFlag)(1), ";")(0)       '首先里面的split以iFlag所给字符串为分隔符,这个case里面就是DBQ=。把这之后的一堆都放在了这个数组里面,DBQ=为0号位置,后面一堆是一号位置。外面那个split以分号为分隔符,去0号位置的数组字符串。即为文件地址。
    MsgBox (iStr)
    iPath = Left(iStr, InStrRev(iStr, "\") - 1)         '先说InstrRev其实它返回一个数值,就是\最后出现的地方。然后用个left,则锁定好了文件夹的位置了。
    MsgBox (iPath)
    With ActiveSheet.PivotTables(1).PivotCache
        .Connection = VBA.Replace(strCon, iPath, ThisWorkbook.Path)  'Replace(整个字符串,要查找的字符串,把要查找的替换成某个字符串),此处成功偷梁换柱了地址,文件夹可以随便挪地方了。
        .CommandText = VBA.Replace(.CommandText, iPath, ThisWorkbook.Path)  '含数据源的文件夹可以改名字,但必须所有表都在同个文件夹。
    End With
    
    
End Sub

接下来是关键的三个msgbox帮助深入理解。

strCon


iStr


iPath

心得:该代码里面有很多function比如split和Instrrev的灵活运用。都值得了解。个人最大收获是懂得了如何去截取Cache的一大段里面信息中的一小部分了。这个的应用范围可以很广。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

取啥都被占用

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值