我在设计VBA时遇到了一些问题,这些问题允许我使用另一张表中的数据刷新一张表中的数据透视表。
我们希望我们的现场团队访问,输入数据和编辑(作为采购跟踪器)有五张表。这五张纸要用一个密码保护(比如明尼阿波利斯)。来自这五张纸的数据会在接下来的六张纸上输入数据透视表,我们希望这些数据受到只有HQ知道的不同密码(例如,jambalaya)的保护。所有这些工作表(即具有数据透视表的工作表)选项卡名称都以LOG开头。这11张纸之后是两张指引。我们也在使用二进制格式,但也尝试了启用宏的格式(尽管不一定要使用所有不同的代码迭代)。我们更喜欢使用二进制文件,因为它可以缩小文件大小,这对于南苏丹的团队而言非常重要,因为他们需要能够将这些来回发送到总部。
我们的问题是,为了使透视表更新,我们必须取消保护,刷新和重新保护工作表,我们在这里遇到问题。我在互联网上找到了一些解决方案的例子,但我们遇到的问题是自动过滤器无法正常工作,有些纸张未锁定,或修复这些但无法刷新数据透视表。
Sub UnprotectRefreshAll()
Dim ws As Worksheet
On Error Resume Next
For Each ws In ActiveWorkbook.Worksheets
ws.Unprotect Password:="jambalaya"
Next ws
ActiveWorkbook.RefreshAll
For Each ws In ActiveWorkbook.Worksheets
ws.Protect Password:="jambalaya", _
AllowUsingPivotTables:=True
ActiveSheet.Protection.AllowFiltering = False
ActiveSheet.Protect AllowFiltering:=True
Next ws
Application.Calculate
End Sub
如果我在页面上的VBA中运行此代码并将数据提供给数据透视表(称为PROCUREMENT TRACKER),则自动过滤器正常工作,其他页面已正确锁定,此页面已锁定,但没有密码。如果我从PROCUREMENT TRACKER页面上链接到该宏的按钮运行它,则页面上的自动过滤器不起作用(并且由于某种原因它落在倒数第二页,其中一个指导页面)。还有一个问题是想要为此设置一个不同的密码,如果我们从明尼阿波利斯开始,它还是会恢复到jambalaya。我希望它只能用密码jambalaya刷新页面(并尝试了几个不同的代码),但即使密码是明尼阿波利斯,它仍会改变它运行的页面。我还看到了一些提示用户输入密码的选项,但我们不想让团队访问密码jambalaya,只有明尼阿波利斯。
Sub LetsTryThis()
Dim I As Integer
On Error Resume Next
For Each Worksheet In ActiveWorkbook.Worksheets
If Current.Name Like "LOG*" Then
Worksheet.Unprotect Password:="jambalaya"
End If
Next
ActiveWorkbook.RefreshAll
For Each Worksheet In ActiveWorkbook.Worksheets
If Worksheet.Name Like "LOG*" Then
Worksheet.Protect Password:="jambalaya", _
AllowUsingPivotTables:=True
ActiveSheet.Protection.AllowFiltering = False
ActiveSheet.Protect AllowFiltering:=True
End If
Next
End Sub
因为带有数据透视表的页面都以LOG开头,所以我也试过上面的代码,希望它只能用数据透视表刷新工作表。如果我从PROCUREMENT TRACKER表中在VBA中运行此宏,则存在一个问题,即保留PROCUREMENT TRACKER页但没有密码,然后如果我从PROCUREMENT TRACKER表上的按钮执行此操作,它将落在最后一个日志表(即带有数据透视表的页面),保留该页面没有密码,它离开了PROCUREMENT TRACKER表(再次,带有按钮和数据透视表中使用的数据)完全不受保护。
理想的结果:
(1)有一个密码(如明尼阿波利斯)用于表格1-4,现场团队可以将数据输入
(2)使用只有HQ知道的数据透视表(和指南),为第5-12页设置第二个密码(例如jambalaya)。这些数据透视表从工作表3(PROCUREMENT TRACKER)中提取数据。
(3)找到一种方法来刷新选项卡5-10上的数据透视表,而不会在此过程中保留任何不受保护/保护而没有密码的情况,并且不会改变使用自动过滤器等功能。
答案 0 :(得分:0)
您在这里遇到的最大问题是使用ActiveSheet
。 Stay away from that unless absolutely needed。它会导致你觉得自己无法追踪的行为 - 就像往常一样。
执行以下操作
Minneapolis
张。然后永远不要对它们做任何事情:)<强>代码强>
Option Explicit
Sub RefreshData()
ProtectPivotSheets False
ThisWorkbook.RefreshAll
ProtectPivotSheets True
End Sub
Sub ProtectPivotSheets(switch As Boolean)
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name Like "LOG*" Then
If switch Then
ws.Protect Password:="jambalaya", AllowUsingPivotTables:=True
Else
ws.Unprotect "jambalaya"
End If
End If
Next
End Sub