首页 > 解决方案 > Excel VBA:如果工作表受到保护,则无法使用特殊单元格

问题描述

我有一段 Excel VBA 代码,如果工作表不受保护但在受保护时不能正常工作。我已阅读之前的类似查询,但认为它们不适用于这种情况 - 建议的修复不适用或需要重复取消保护/重新保护工作表,我希望尽可能避免。

我的代码如下所示:

Dim NonEmptyCells As Range
Dim Cell As Range

On Error Goto Fin
Set NonEmptyCells = Range("D3:H6").SpecialCells(xlCellTypeBlanks)

For Each Cell In NonEmptyCells 

    '   do stuff with cell

Next Cell

Fin:
On Error GoTo 0

使用“On Error”是为了避免在找到零个空单元格时出现循环。

设置了单元格格式,Range(D3:H6)因此单元格不会被锁定,也不会被隐藏。

当工作表不受保护时,特殊单元格行正确返回空白单元格的范围,但是当受保护的特殊单元格总是出错时,就好像没有找到空单元格一样。

所有帮助表示赞赏。

标签: excelvba

解决方案


只有在设置了保护时才能使用用户界面。宏将起作用,工作表将受到保护,不会受到用户他/她自己所做的更改。

在 ThisWorkbook 模块部分中:

Private Sub Workbook_Open()
Worksheets("Sheet1").Protect Password:="yourPassword", UserInterFaceOnly:=True
End Sub

调整您的密码和工作表名称,(确保在运行宏时运行工作簿打开事件,即重新打开它)


推荐阅读