|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
原帖由 makesure5 于 2010-8-10 12:00 发表
恩,的确,我的是连接外部来源,用的是ODBC,我会按照您的方法试一试。我只是简单的把数据透视表复制过去,没有复制整个sheet
再怎么复制,都会出现这样的情形。因为odb查询时,对指定路径下的指定文件进行查询。一旦路径或文件名发生变化都会提示出错。下面代码可以消除这个问题。按alt+F11,后拷贝到该文件下的ThisWorkBook中,按F8逐行执行完毕,保存后退出。再刷新即可。
Private Sub Workbook_Open()
Dim strCon As String, iPath As String, i As Integer, iFlag As String, iStr As String
'定义变量
On Error Resume Next
strCon = ActiveSheet.PivotTables(1).PivotCache.Connection
'将当前活动数据透视表中缓存连接信息赋值给变量strCon
Select Case Left(strCon, 5) 'select case语句,条件为strCon变量中从左侧取5个字符
Case "ODBC;" '用于判断缓存连接信息中的数据连接方式,如果是ODBC方式
iFlag = "DBQ=" '将"DBQ=" 赋值给变量iFlag
Case "OLEDB" '用于判断缓存连接信息中的数据连接方式,如果是OLEDB方式
iFlag = "Source=" '将"DBQ=" 赋值给变量iFlag
Case Else
Exit Sub
End Select
iStr = Split(Split(strCon, iFlag)(1), ";")(0) '在变量strCon中截取文件路径信息
iPath = ActiveWorkbook.FullName '获取当前活动工作簿的完全路径
With ActiveSheet.PivotTables(1).PivotCache '替换数据透视表中缓存信息中的文件完全路径
.Connection = VBA.Replace(strCon, iStr, iPath)
.CommandText = VBA.Replace(.CommandText, iStr, iPath)
End With
End Sub |
|