我有一个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
我希望此代码可以取消对“图表”工作表的保护,然后刷新“数据”表(数据连接),然后再保护“图表”工作表,以便用户无法操纵“图表”工作表上的“图表”或“数据透视表”。