将范围设置为特定货币格式的所有工作表

时间:2020-03-11 13:21:10

标签: excel vba format worksheet

不确定为什么这行不通,但是它的想法是打开所有工作表,取消保护,将单元格格式化为货币,再次启用保护,同时启用过滤器。这适用于保护和取消保护,但尝试格式化时会收到错误消息:

无法设置范围类的numberformat属性

Sub UnProtect()

    Dim cell_to_format As Range

      ' Loop through all sheets in the workbook

      For i = 1 To Sheets.Count

         Sheets(i).UnProtect "T1T3NPM"

         With ActiveSheet

       Range("L8:L99999").Cells.NumberFormat = "£#,##0.00"

        Range("O8:O99999").NumberFormat = "£#,##0.00"

        Range("R8:R99999").NumberFormat = "£#,##0.00"

        Range("U8:U99999").NumberFormat = "£#,##0.00"

        Range("X8:X99999").NumberFormat = "£#,##0.00"

        Range("AA8:AA99999").NumberFormat = "£#,##0.00"

        Range("AD8:AD99999").NumberFormat = "£#,##0.00"

    .Protect Password:="T1T3NPM", AllowFiltering:=True
    .EnableSelection = xlUnlockedCells
End With

      Next i

End Sub

预先感谢

2 个答案:

答案 0 :(得分:2)

With ActiveSheet应该是With Sheets(i)

您要解除对Sheets(i)的保护,但是正在使用Activesheet或可能不是Sheets(i)的{​​{1}}

此外,您需要使用Worksheets而不是Sheets,否则,如果有图表表,则会出现错误。

因此将Sheets(i)更改为Worksheets(i)

您还需要完全限定范围对象,否则它将与Activesheet一起使用,而不与Worksheets(i)一起使用

With Worksheets(i)
    '~~> Notice the DOT before Range
    .Range("L8:L99999").Cells.NumberFormat = "£#,##0.00"
End With

答案 1 :(得分:0)

您可以尝试:

Sub UnProtect()

    Dim ws As Worksheet
    Dim i As Long

    For Each ws In ThisWorkbook.Worksheets

      With ws

          .UnProtect "T1T3NPM"

          For i = 12 To 30 Step 3

              .Range(.Cells(8, i), .Cells(99999, i)).NumberFormat = "£#,##0.00"

          Next i

          .Protect Password:="T1T3NPM", AllowFiltering:=True
          .EnableSelection = xlUnlockedCells

      End With

    Next ws

End Sub
相关问题