0

OLAPタイプの分析には、.cubファイルに基づくピボットテーブルでExcelを使用することがよくあります。これは、xlsを移動する必要があり、内部的に.cubファイルの場所への非相対参照があることに気付いた場合を除いて素晴らしいです。これにどのように対処できますか?つまり、.cubファイルに依存するxlsファイル内を移動するのが便利になりますか?

私が思いついた最善の答えは、ピボットテーブルの.cubファイルの場所への参照を更新するマクロを作成することです。

4

1 に答える 1

0

これが私が最終的に作成したマクロです。明らかに、これはあなたにとって正しくないかもしれないいくつかの仮定をします、例えばそれは同じ.cubファイルを使用するためにワークブックのすべてのピボットテーブルを更新します。

ブックのピボットテーブル接続をループして、同じディレクトリにあるこの.xlsファイルと同じ名前の.cubファイルを使用します。これは、Pivo​​tCachesがLocalConnectionsを使用していないことを前提としています。ActiveWorkbook.PivotCaches(1).UseLocalConnection=Falseであることを確認してください。

Sub UpdatePivotTableConnections()
    Dim sNewCubeFile As String
    sNewCubeFile = ActiveWorkbook.Path & Replace(ActiveWorkbook.Name, ".xls", ".cub", , , vbTextCompare)

    Dim iPivotCount As Integer
    Dim i As Integer
    iPivotCount = ActiveWorkbook.PivotCaches.Count

    ' Loop through all the pivot caches in this workbook. Use some 
    ' nasty string manipulation to update the connection.
    For i = 1 To iPivotCount
    With ActiveWorkbook.PivotCaches(i)
        ' Determine which cub file the PivotCache is currently using
        Dim sCurrentCubeFile As String
        Dim iDataSourceStartPos As Integer
        Dim iDataSourceEndPos As Integer
        iDataSourceStartPos = InStr(1, .Connection, ";Data Source=", vbTextCompare)
        If iDataSourceStartPos > 0 Then
            iDataSourceStartPos = iDataSourceStartPos + Len(";Data Source=")
            iDataSourceEndPos = InStr(iDataSourceStartPos, .Connection, ";", vbTextCompare)
            sCurrentCubeFile = Mid(.Connection, iDataSourceStartPos, iDataSourceEndPos - iDataSourceStartPos)

            ' If the PivotCache is using a different cub file then update the connection to use the new one.
            If sCurrentCubeFile <> sNewCubeFile Then
                .Connection = Left(.Connection, iDataSourceStartPos - 1) & sNewCubeFile & Right(.Connection, Len(.Connection) - iDataSourceEndPos + 1)
            End If
        End If
    End With
    Next i
End Sub
于 2010-04-25T12:01:54.470 に答える