如何“刷新”连接到受保护工作表上的数据透视表的数据连接

时间:2019-03-26 14:28:52

标签: excel vba database-connection

我有一个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

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

0 个答案:

没有答案