Làm mới tất cả các bảng tổng hợp trong sổ làm việc excel của tôi bằng macro


84

Tôi có một sổ làm việc với 20 bảng tổng hợp khác nhau. Có cách nào dễ dàng để tìm tất cả các bảng tổng hợp và làm mới chúng trong VBA không?

Câu trả lời:


170

Đúng.

ThisWorkbook.RefreshAll

Hoặc, nếu phiên bản Excel của bạn đủ cũ,

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

17
Ồ, một lời tán thành. Sau hơn năm năm, đó là một sự thay đổi mới mẻ;)
GSerg

3
Thật vậy .. đó là làm mới .. ai đó thậm chí cố gắng để đóng câu hỏi này như off-topic ... Nó không phải như tôi hỏi để làm điều đó chỉ bằng cách sử dụng chuột hoặc bất cứ điều gì: D
Lipis

3
Tuyệt vời, tôi phải sử dụng nó vì tôi muốn làm mới các trục sau khi tôi có dữ liệu bên ngoài mới, vì vậy ThisWorkbook.RefreshAll không hoạt động với tôi.
Yasskier

5
Chỉ là một ghi chú. Các ThisWorkbook.RefreshAllphương pháp đối với một số lý do không hoạt động, nếu Application.Calculation = xlCalculationManual. Đặt thuộc tính tính toán Application.Calculation = xlCalculationAutomatictrước khi sử dụng mã.
kolcinx

3
@GSerg Xin lỗi vì đã khôi phục bài viết cũ này, nhưng tôi có một câu hỏi (đã đăng Ở đây ): Chúng ta có cần phải làm gì Updatesau dấu RefreshTablekhông? sự khác biệt giữa hai là gì?
Oscar Anthony

26

Mã VBA này sẽ làm mới tất cả các bảng / biểu đồ tổng hợp trong sổ làm việc.

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

Một tùy chọn không có chương trình khác là:

  • Nhấp chuột phải vào mỗi bảng tổng hợp
  • Chọn tùy chọn Bảng
  • Đánh dấu vào tùy chọn 'Làm mới khi mở' .
  • Bấm vào nút OK

Thao tác này sẽ làm mới bảng tổng hợp mỗi khi mở sổ làm việc.


20

ActiveWorkbook.RefreshAlllàm mới mọi thứ, không chỉ bảng tổng hợp mà còn cả các truy vấn ODBC. Tôi có một số truy vấn VBA đề cập đến Kết nối dữ liệu và sử dụng tùy chọn này bị lỗi khi lệnh chạy các kết nối Dữ liệu mà không có chi tiết được cung cấp từ VBA

Tôi đề xuất tùy chọn nếu bạn chỉ muốn các trục được làm mới

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

1
kiểm tra câu trả lời được bình chọn nhiều nhất .. cách tiếp cận thứ hai thực sự là những gì bạn đã thử ở đây .. nhưng đối với toàn bộ sự bùng nổ .. không chỉ cho trang tính đang hoạt động .. cả hai trường hợp nó thực sự phụ thuộc .. và tôi đã không chạm vào nó kể từ đó ..
Lipis

Điều gì xảy ra nếu bảng tổng hợp không có trong trang tính đang hoạt động?
quái

8

Trong những trường hợp nhất định, bạn có thể muốn phân biệt giữa PivotTable và PivotCache của nó. Cache có phương pháp làm mới riêng và các bộ sưu tập của riêng nó. Vì vậy, chúng tôi có thể đã làm mới tất cả PivotCaches thay vì PivotTable.

Sự khác biệt? Khi bạn tạo Bảng Pivot mới, bạn sẽ được hỏi liệu bạn có muốn nó dựa trên bảng trước đó hay không. Nếu bạn nói không, Pivot Table này có bộ nhớ cache của riêng nó và tăng gấp đôi kích thước của dữ liệu nguồn. Nếu bạn nói có, bạn giữ cho WorkBook của mình nhỏ, nhưng bạn thêm vào bộ sưu tập Bảng Pivot dùng chung một bộ nhớ cache. Toàn bộ bộ sưu tập được làm mới khi bạn làm mới bất kỳ Bảng Pivot đơn lẻ nào trong bộ sưu tập đó. Do đó, bạn có thể tưởng tượng sự khác biệt có thể là gì giữa việc làm mới mọi bộ đệm trong WorkBook, so với việc làm mới mọi Pivot Table trong WorkBook.


5

Có một tùy chọn làm mới tất cả trong thanh công cụ Pivot Table. Thế là đủ. Không phải làm bất cứ điều gì khác.

Nhấn ctrl + alt + F5


3
Tôi không đồng ý. Điều gì sẽ xảy ra nếu Lipis muốn tự động hóa quá trình làm mới, bất cứ khi nào một ô được thay đổi?
StockB

1

Bạn có bộ sưu tập PivotTables trên đối tượng VB Worksheet . Vì vậy, một vòng lặp nhanh như thế này sẽ hoạt động:

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

Ghi chú từ chiến hào:

  1. Hãy nhớ bỏ bảo vệ mọi trang tính được bảo vệ trước khi cập nhật PivotTable.
  2. Tiết kiệm thường xuyên .
  3. Tôi sẽ suy nghĩ thêm và cập nhật trong thời gian thích hợp ... :)

Chúc may mắn!


0

Mật mã

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

hoạt động tốt.

Mã được sử dụng trong mô-đun trang tính kích hoạt, do đó, nó hiển thị nhấp nháy / trục trặc khi trang tính được kích hoạt.


0

Thậm chí chúng ta có thể làm mới kết nối cụ thể và đến lượt nó, nó sẽ làm mới tất cả các trục được liên kết với nó.

Đối với mã này, tôi đã tạo bộ cắt từ bảng hiện diện trong 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

-2

Tôi đã sử dụng lệnh được liệt kê bên dưới trong quá khứ gần đây và nó có vẻ hoạt động tốt.

ActiveWorkbook.RefreshAll

Hy vọng rằng sẽ giúp.


6
Nó giúp ích rất nhiều .. nhưng bạn không thấy rằng nó thực sự được viết ở trên? Như 4 năm trước ?! ( stackoverflow.com/a/70976/8418 )
Lipis

-3

Nếu bạn đang sử dụng MS Excel 2003 thì hãy đi tới view-> Tool bar-> Pivot Table Từ thanh công cụ này, chúng ta có thể làm mới bằng cách nhấp vào! biểu tượng này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.