请把这代码修改一下,修改后既能保护非空单元格,也能保护含公式的单元格。
请把这代码修改一下,现在能保护不含公式的非空单元格,而公式保护不了,修改后既能保护非空单元格,也能保护含公式的单元格。
Sub 保护工作薄中所有非空单元格()
'关闭工作薄前保护所有工作表
IName = ActiveSheet.Name
For i = 1 To Sheets.Count
Sheets(i).Select'
If Application.CountA(Range("A:IV")) <> 0 Then '2003A:IV用2007以上定义列用A:XFD
ActiveSheet.Unprotect
Cells.Locked = False
Cells.FormulaHidden = False
Set rng = Cells.SpecialCells(xlCellTypeConstants, 23)
If Not rng Is Nothing Then
rng.Locked = True
End If
Set rng = Cells.SpecialCells(xlCellTypeConstants, 23)
If Not rng Is Nothing Then
rng.Locked = True
End If
ActiveSheet.Protect DrawingObjects:=True, contents:=True, Scenarios:=True
End If
Next i
Sheets(IName).Select
End Sub
Sub 保护工作薄中所有非空单元格()
Dim IName$, i% '声明变量
IName = ActiveSheet.Name '将当前激活的工作表名赋值于变量IName
For i = 1 To Sheets.Count '在1到工作表总个数中循环,步长=1
Sheets(i).Select '选择第i个工作表
If Application.CountA(Cells) <> 0 Then '工作表不是空白时,执行IF……End If语句
ActiveSheet.Unprotect '撤销保护工作表
Cells.Locked = False '整个工作表不锁定
Cells.FormulaHidden = False '整个工作表公式不隐藏
On Error Resume Next '执行下面语句出现错误时,接着执行下一句
Cells.SpecialCells(xlCellTypeConstants, 23).Locked = True '锁定工作表中常量单元格
Cells.SpecialCells(xlCellTypeFormulas, 23).Locked = True '锁定工作表中公式单元格
Cells.SpecialCells(xlCellTypeFormulas, 23).FormulaHidden = True '隐藏工作表单元格中公式
ActiveSheet.Protect DrawingObjects:=True, contents:=True, Scenarios:=True '保护工作表
End If 'IF……End If语句结束
Next i 'For……Next语句结束
Sheets(IName).Select '返回保护工作表之前的工作表
End Sub