1

我有一本工作簿,里面有几张我想保护的工作表。我没有在保护上使用密码。我有一些与此表相关联的可视化基本代码,以扩展合并单元格的行宽。当工作表受到保护时,代码将不起作用。

我确实找到了一些关于在我的代码中添加不受保护的代码的指导,但无法弄清楚将它放在哪里以及如何解决没有密码的事实。进一步的指导将不胜感激!

这是我的代码:

Private Sub Worksheet_Change(ByVal Target As Range)

     Dim NewRwHt As Single
     Dim cWdth As Single, MrgeWdth As Single
     Dim c As Range, cc As Range
     Dim ma As Range

     With Target
        If .MergeCells And .WrapText Then
            Set c = Target.Cells(1, 1)
            cWdth = c.ColumnWidth
            Set ma = c.MergeArea
            For Each cc In ma.Cells
                MrgeWdth = MrgeWdth + cc.ColumnWidth
            Next
            Application.ScreenUpdating = False
            ma.MergeCells = False
            c.ColumnWidth = MrgeWdth
            c.EntireRow.AutoFit
            NewRwHt = c.RowHeight
            c.ColumnWidth = cWdth
            ma.MergeCells = True
            ma.RowHeight = NewRwHt
            cWdth = 0: MrgeWdth = 0
            Application.ScreenUpdating = True
        End If
    End With
End Sub
4

3 回答 3

3

你可能会做这样的事情:

.Unprotect用和包围你的代码.Protect

Sub protectSheet()

    Dim ws As Worksheet
    Set ws = Sheets(1)

    With ws
        .Unprotect "password"

        'Insert Code Here

        .Protect "password"
    End With

End Sub
于 2013-10-03T22:03:38.527 回答
1

尝试这个:

Private Sub Workbook_Open()

Dim wSheet As Worksheet

For Each wSheet In Worksheets

    wSheet.Protect Password:="Password_here", _
    UserInterFaceOnly:=True

Next wSheet

End Sub

将此代码放在“ThisWorkbook”中,然后使用Workbook_Open事件。
每次打开 WB 时,此代码都会保护所有 WS,但允许宏运行,因为UserInterfaceOnly设置为true

于 2013-10-04T00:49:25.263 回答
0
  1. 您需要使用密码保护工作表。
  2. 如果您希望用户在工作表受到保护的情况下编辑某些单元格,则在保护工作表之前将这些单元格的锁定属性设置为 false。
  3. 现在,当Worksheet_Change触发或调用任何试图对 excel 范围进行一些更改的过程(锁定单元格 = true)时,您需要在代码开头取消保护工作表并在最后再次保护它。您可以参考@sobin 答案的语法。
  4. 您也可以使用错误处理程序并明确保护工作表。这样做是为了避免工作表不受保护的情况,然后由于任何原因出现错误,从而使工作表不受保护。
于 2013-10-04T01:19:36.363 回答