У меня есть книга 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.