不确定为什么这行不通,但是它的想法是打开所有工作表,取消保护,将单元格格式化为货币,再次启用保护,同时启用过滤器。这适用于保护和取消保护,但尝试格式化时会收到错误消息:
无法设置范围类的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
预先感谢
答案 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