1

我有一个 Excel 电子表格,它需要保护大部分单元格不被编辑。我无法以通常的方式保护工作表,因为我与组一起工作(顶部的小 + 以展开某些列)。

我找到了一个 VBA 宏来保护我的工作表,但在 Excel 2010 中注意到我可以简单地“取消保护工作表”并修改所有内容,即使整个工作簿仍然受到保护。

这是我在“ThisWorkbook”中使用的宏:

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect Password:="nopassword" 
If Range("C3").Value = "protect" Then 
    Range("C4:C65536").Locked = True 
Else
    Range("C4:C65536").Locked = False
End If
ActiveSheet.Protect Password:="fakepass" 
End Sub

Private Sub Workbook_Open()
Dim x As Long

For x = 1 To ActiveWorkbook.Sheets.Count
    With ActiveWorkbook.Sheets(x)
        .Protect UserInterfaceOnly:=True
        .EnableOutlining = True
    End With
Next

End Sub

如何修改此代码以使用工作表 1?

我知道这不是最安全的保护形式,但它只是为了防止人们意外修改细胞。

4

2 回答 2

1

如果你改变:

ActiveSheet.Protect Password:="fakepass" 

至:

Worksheets("Sheet1").Protect Password:="fakepass"

它将应用于 Sheet1 而不仅仅是活动工作表。

或者您可以创建一个宏来保护所有工作表,例如:

Sub ProtectAll()

Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets
ws.Protect Password:="fakepass", DrawingObjects:=True, Contents:=True, Scenarios:=True
Next ws

End Sub

然后将其调用到您的主代码中?

于 2014-07-19T11:03:50.547 回答
0

ActiveSheet.Unprotect Password:="nopassword"只会参考您所在的任何工作表。

Sheets("Sheet1").Activate无论选择什么工作表,都会将活动工作表设置为 sheet1。

那是你所追求的吗?

于 2013-05-06T15:17:57.060 回答