问题: 我的工作簿中有两个工作表(A和B),每个工作表包含几个表和3个数据透视表。每当单击或更新这些数据透视表上的单元格时,我就会使用下面的代码自动刷新这些数据透视表。奏效了。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
PivotTables("001").RefreshTable
PivotTables("002").RefreshTable
PivotTables("003").RefreshTable
End Sub
现在,用密码保护这些工作表后,如何保持相同的刷新功能?
为了测试,我通过密码仅保护了工作表。 然后,我将此代码放在ThisWorkbook模块的下面(在论坛中找到)。
Private Sub Workbook_Open()
With Me.Worksheets("A")
.AllowPivotTable = True
.Protect Contents:=True, UserInterfaceOnly:=True, _
AllowUsingPivotTables:=True
End With
End Sub
在关闭工作簿并再次打开它之后, 程序显示错误消息:
“运行时错误438,对象不支持此属性或方法”
对于代码行.AllowPivotTable = True
您能告诉我该怎么做吗? 此启用代码不包含密码。 我需要在密码中输入密码吗? 我读过一些文章说最好不要在代码中输入密码。
答案 0 :(得分:0)
我有同样的情况,这就是我的解决方法。
我有3张工作表,分别为SillLevae,摘要1和摘要2。请病假包含主要数据,摘要1和2包含数据透视表,因此下面是我尝试的代码,它工作正常。
请尝试这种方式:
Sub RefreshPtInSummary1()
Call RefreshPivotTables(shtSummary1)
End Sub
Sub RefreshPtInSummary2()
Call RefreshPivotTables(shtSummary2)
End Sub
Sub RefreshPivotTables(sht As Worksheet)
Dim pt As pivotTable
shtSummary1.Unprotect g_sPassword
shtSummary2.Unprotect g_sPassword
For Each pt In sht.PivotTables
pt.PivotCache.Refresh
Exit For
Next pt
shtSummary1.Protect g_sPassword
shtSummary2.Protect g_sPassword
MsgBox "Pivot Table Updated"
End Sub