Как «обновить подключение к данным», привязанным к сводным таблицам на защищенном листе - PullRequest
0 голосов
/ 26 марта 2019

У меня есть книга Excel, которая содержит защищенный лист с сводными таблицами и сводными диаграммами. Исходные данные для сводных таблиц - это подключение к данным из MS Access на незащищенном листе. На Workbook_Open я пытаюсь снять защиту листа диаграммы (который содержит сводные таблицы и диаграммы), а затем обновить подключение к данным на листе данных (который уже незащищен) и содержит исходные данные. Код, который я использую на WorkBook_Open, не обновляет мое подключение к данным.

Я пробовал несколько методов, чтобы включить защиту листа на Workbook_BeforeClose и Открыть, обновить при открытии и закрытии, используя Sheets("Data").EnableCalculation = True и затем защита на открытом безрезультатно.

Я получаю эту ошибку:

«Невозможно выполнить команду, пока защищенный лист содержит другой отчет сводной таблицы, основанный на тех же данных источника».

У меня есть множество сводных таблиц, извлекающих данные из DataConnection. Когда я использовал метод EnableCalculation, ничего не происходит, но когда я пытаюсь обновить, я получаю эту ошибку. Пожалуйста, смотрите мой код

Private Sub Workbook_Open()
  Application.ScreenUpdating = False
  Application.EnableEvents = False
  Application.DisplayAlerts = False
  Worksheets("Charts").Activate
  ActiveSheet.EnableCalculation = True

    worksheetactiveprotect
End Sub

Sub worksheetactiveprotect()
 Dim WS As Worksheet
 Dim PF As PivotField
 Dim PT As PivotTable

 On Error Resume Next
 Set WS = ActiveWorkbook.Sheets("Charts")
 On Error GoTo 0
 If WS Is Nothing Then
   MsgBox "Data sheet not found"
 Else
   If WS.Name = ActiveWorkbook.ActiveSheet.Name Then

    Sheets("Charts").Unprotect Password:="mypassword"

        Sheets("Charts").EnableCalculation = True
        Sheets("Data").EnableCalculation = True

    Sheets("Charts").Protect Password:="mypassword" _
    , AllowUsingPivotTables:=False, AllowFiltering:=True

    End If
  End If
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  With ActiveSheet
    .Unprotect Password:="mypassword"
  End With
DoEvents
    Sheets("Charts").EnableCalculation = True
    Sheets("Data").EnableCalculation = True
DoEvents
    Application.ActiveWindow.Close SaveChanges:=True
End Sub

Я ожидал, что этот код снимет защиту с листа Charts, затем обновит Data Sheet (Data Connection), а затем защитит лист Charts, чтобы пользователи не могли манипулировать диаграммами или сводными таблицами на листе Charts.

...