2008-09-16 6 views

答えて

138

はい。

ThisWorkbook.RefreshAll 

それとも、あなたのExcelのバージョンが古すぎる場合、

Dim Sheet as WorkSheet, Pivot as PivotTable 
For Each Sheet in ThisWorkbook.WorkSheets 
    For Each Pivot in Sheet.PivotTables 
     Pivot.RefreshTable 
     Pivot.Update 
    Next 
Next 
+13

ああ、downvoteを。 )5年以上経ってから、それは爽やかな変化です;) – GSerg

+1

本当に..それは爽快です。誰かがこの問題をオフトピックとして閉じることさえしようとしています...私はマウスや何か:D – Lipis

+3

素晴らしいですが、私は新しい外部データを取得した後にピボットをリフレッシュしたいので、それを使用しなければならなかったので、ThisWorkbook.RefreshAllは私のために働いていませんでした。 – Yasskier

1

あなたはVB ワークシートオブジェクト上ピボットテーブルコレクションを持っています。したがって、このような迅速なループが動作します:トレンチから

Sub RefreshPivotTables() 
    Dim pivotTable As PivotTable 
    For Each pivotTable In ActiveSheet.PivotTables 
     pivotTable.RefreshTable 
    Next 
End Sub 

注:

  1. をピボットテーブルを更新する前に、任意の保護シートの保護を解除することを忘れないでください。
  2. 多くの場合、保存はです。私はやがてより、更新を考えます
  3. ... :)

幸運!

20

このVBAコードは、ブック内のすべてのピボットテーブル/グラフを最新表示します。

Sub RefreshAllPivotTables() 

Dim PT As PivotTable 
Dim WS As Worksheet 

    For Each WS In ThisWorkbook.Worksheets 

     For Each PT In WS.PivotTables 
      PT.RefreshTable 
     Next PT 

    Next WS 

End Sub 

別の非プログラムによるオプションは次のとおりです。

  • は、右の各ピボットテーブルの上に
  • 表の選択オプション
  • ティックをクリックしオプション「オープンでリフレッシュ」。
  • [OK]ボタンをクリックし

これは、ピボットテーブルに、ブックが開かれるたびに更新されます。

5

ピボットテーブルツールバーには、すべてをリフレッシュするオプションがあります。それは十分です。他の何かをする必要はありません。ピボットテーブルとそのPivotCacheを区別することがあります特定の状況で

プレスCTRL + ALT + F5

+3

私は同意しません。たとえば、セルが変更されるたびに、Lipisがリフレッシュプロセスを自動化したい場合はどうなりますか? – StockB

8

。キャッシュには、独自のリフレッシュ方法と独自のコレクションがあります。したがって、ピボットテーブルの代わりにすべてのピボットキャッシュをリフレッシュできました。

違いがありますか?新しいピボットテーブルを作成すると、前のテーブルに基づいて欲しいかどうかを尋ねられます。いいえの場合、このピボットテーブルは独自のキャッシュを取得し、ソースデータのサイズを倍にします。 「はい」と答えた場合は、WorkBookを小さくしますが、1つのキャッシュを共有するピボット・テーブルのコレクションに追加します。コレクション内の単一のピボットテーブルを更新すると、コレクション全体が更新されます。したがって、WorkBook内のすべてのキャッシュをリフレッシュする場合と、WorkBook内のすべてのPivot Tableをリフレッシュする場合との違いを想像することができます。

-2

MS Excel 2003を使用している場合は、表示 - >ツールバー - >ピボットテーブルの順にクリックします。このツールバーから、このシンボル。

-1

私は最近の過去に下記のコマンドを使用していますが、正常に動作しているようです。

ActiveWorkbook.RefreshAll 

希望するものがあります。

+5

それは多くのことを助けますが、それは実際に上に書かれているのを見たことがありませんでしたか? 4年前と同じように! (http://stackoverflow.com/a/70976/8418) – Lipis

12

ActiveWorkbook.RefreshAllは、ピボットテーブルだけでなくODBCクエリもすべて更新します。コマンドはVBA

から供給された詳細なしにデータ接続を実行するように私はあなただけピボットが

Sub RefreshPivotTables()  
    Dim pivotTable As PivotTable  
    For Each pivotTable In ActiveSheet.PivotTables   
    pivotTable.RefreshTable  
    Next 
End Sub 
をリフレッシュしたい場合、私はオプションをお勧めしますデータ接続を参照してください。VBAクエリのカップルを持っていると、このオプションがクラッシュを使用して
+1

最も投票された答えをチェック.. 2番目のアプローチは実際にあなたがここで試したものです..しかし、全体のブーム..アクティブシートの..だけでなくそれは本当に依存していると私はそれ以来触れていない.. – Lipis

0

コード

Private Sub Worksheet_Activate() 
    Dim PvtTbl As PivotTable 
     Cells.EntireColumn.AutoFit 
     For Each PvtTbl In Worksheets("Sales Details").PivotTables 
     PvtTbl.RefreshTable 
     Next 
End Sub 

が正常に動作します。

コードはアクティブシートモジュールで使用されているため、シートがアクティブになるとフリッカー/グリッチが表示されます。

0

でも、特定の接続を更新して、それにリンクされているすべてのピボットを更新します。このコードの場合

私は、Excelに存在するテーブルからスライサーを作成しました:

Sub UpdateConnection() 
     Dim ServerName As String 
     Dim ServerNameRaw As String 
     Dim CubeName As String 
     Dim CubeNameRaw As String 
     Dim ConnectionString As String 

     ServerNameRaw = ActiveWorkbook.SlicerCaches("Slicer_ServerName").VisibleSlicerItemsList(1) 
     ServerName = Replace(Split(ServerNameRaw, "[")(3), "]", "") 

     CubeNameRaw = ActiveWorkbook.SlicerCaches("Slicer_CubeName").VisibleSlicerItemsList(1) 
     CubeName = Replace(Split(CubeNameRaw, "[")(3), "]", "") 

     If CubeName = "All" Or ServerName = "All" Then 
      MsgBox "Please Select One Cube and Server Name", vbOKOnly, "Slicer Info" 
     Else 
      ConnectionString = GetConnectionString(ServerName, CubeName) 
      UpdateAllQueryTableConnections ConnectionString, CubeName 
     End If 
    End Sub 

    Function GetConnectionString(ServerName As String, CubeName As String) 
     Dim result As String 
     result = "OLEDB;Provider=MSOLAP.5;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Update Isolation Level=2" 
     '"OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False" 
     GetConnectionString = result 
    End Function 

    Function GetConnectionString(ServerName As String, CubeName As String) 
    Dim result As String 
    result = "OLEDB;Provider=MSOLAP.5;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=" & CubeName & ";Data Source=" & ServerName & ";MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Update Isolation Level=2" 
    GetConnectionString = result 
End Function 

Sub UpdateAllQueryTableConnections(ConnectionString As String, CubeName As String) 
    Dim cn As WorkbookConnection 
    Dim oledbCn As OLEDBConnection 
    Dim Count As Integer, i As Integer 
    Dim DBName As String 
    DBName = "Initial Catalog=" + CubeName 

    Count = 0 
    For Each cn In ThisWorkbook.Connections 
     If cn.Name = "ThisWorkbookDataModel" Then 
      Exit For 
     End If 

     oTmp = Split(cn.OLEDBConnection.Connection, ";") 
     For i = 0 To UBound(oTmp) - 1 
      If InStr(1, oTmp(i), DBName, vbTextCompare) = 1 Then 
       Set oledbCn = cn.OLEDBConnection 
       oledbCn.SavePassword = True 
       oledbCn.Connection = ConnectionString 
       oledbCn.Refresh 
       Count = Count + 1 
      End If 
     Next 
    Next 

    If Count = 0 Then 
     MsgBox "Nothing to update", vbOKOnly, "Update Connection" 
    ElseIf Count > 0 Then 
     MsgBox "Update & Refresh Connection Successfully", vbOKOnly, "Update Connection" 
    End If 
End Sub 
関連する問題