使用diff密码

时间:2018-01-19 18:27:23

标签: excel vba excel-vba

我在设计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上的数据透视表,而不会在此过程中保留任何不受保护/保护而没有密码的情况,并且不会改变使用自动过滤器等功能。

1 个答案:

答案 0 :(得分:0)

您在这里遇到的最大问题是使用ActiveSheetStay away from that unless absolutely needed。它会导致你觉得自己无法追踪的行为 - 就像往常一样。

执行以下操作

  1. 根据需要手动保护Minneapolis张。然后永远不要对它们做任何事情:)
  2. 使用此代码进行刷新。
  3. <强>代码

    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