如何在受保护的工作表上进行可视化基础工作(无保护密码)

时间:2013-10-03 21:33:12

标签: excel vba excel-vba

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

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

这是我的代码:

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

试试这个:

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

,因此允许宏运行

答案 2 :(得分:0)

  1. 您需要使用密码保护工作表。
  2. 如果您希望用户编辑某些单元格,即使工作表受到保护,也请在保护工作表之前将这些单元格的锁定属性设置为false。
  3. 现在当触发Worksheet_Change或调用任何尝试对excel范围进行一些更改的过程(locked cells = true)时,您需要在代码开头取消保护工作表并保护它再次结束。您可以参考@sobin答案获取语法。
  4. 您也可以使用错误处理程序并明确保护工作表。这样做是为了避免纸张未受保护,然后出现任何原因导致纸张不受保护的错误。