Macro并没有正确保护我的ws

时间:2018-04-05 13:19:14

标签: vba excel-vba excel-2003 excel

我遇到一个小问题,即假设取消保护我的工作表,刷新数据透视表并再次保护ws(有条件)。它只能部分工作,因为它取消了对ws的保护,它刷新了数据透视表,但之后发生了一些奇怪的事情: - 它并没有真正恢复行和列的格式化 - 它没有正确保护ws(当你点击工具,保护时我的ws看起来受到保护 - 但是,你可以在不再输入密码的情况下取消保护它?!!

    Sub RefreshPivotTables()
    ' will remove password and refresh PT
    Dim xpt As PivotTable
        With ActiveSheet
            .Unprotect Password:="milessss"
            For Each xpt In Worksheets("WT-1").PivotTables
                xpt.RefreshTable
            Next xpt
            .Protect Password:="milessss", AllowFormattingCells:=True, _
                AllowFormattingRows:=True, AllowFormattingColumns:=True, _
                AllowUsingPivotTables:=True, EnableOutlining:=True
        End With
    End Sub

See image attached

有人可以帮忙吗? 干杯 - Mile`S

1 个答案:

答案 0 :(得分:0)

简单的拼写错误:

  .Protect AllowFormattingRows:=True
  .Protect AllowFormattingColumns:=True

Rows代替RawsColumns代替Column

来源:Protection.AllowFormattingRows Property (Excel)

Typo已得到纠正,但要实现目标,您需要使用以下代码:

Private Sub RefreshPivotTables()
' will remove password and refresh PT

Dim xpt As pivotTable
With ActiveSheet
  .Unprotect Password:="milessss"
  For Each xpt In .PivotTables
      xpt.RefreshTable
  Next xpt
  .Protect Password:="milessss", AllowFormattingCells:=True,AllowFormattingRows:=True, AllowFormattingColumns:=True, AllowUsingPivotTables:=True

End With
End Sub

实际上,您使用Protect功能多次使用不同的选项。因此,每次使用它时,都会删除您使用的旧选项。因此,在宏的末尾,唯一可用的属性是AllowUsingPivotTables,但没有设置密码。所以你需要在一个表达式中设置所有参数。