未受保护sheet无法修改

Unprotected sheet cannot be modified

我有一个 sheet,我用密码保护了它。当我用 VBA 更改 sheet 上的任何内容时,我会这样取消保护:

Private Sub Worksheet_Change(ByVal target As Range)
    ActiveSheet.Unprotect Password:="pass"

    'do stuffs

    ActiveSheet.Protect Password:="pass"

End Sub

问题是我仍然在这一行收到此错误消息:

 For j = 13 To 12 + numberofsomething
     With Range("H" & j & ":L" & j).Borders
         .LineStyle = xlContinuous  '<---Here
         .Weight = xlMedium
         .Color = RGB(255, 0, 0)
     End With
 Next j

Run-time error: 1004 Unable to set the LineStyle proprety of the Borders class

可能是什么问题?

每次都保护和取消保护工作表效率不高。

您可以像这样保护您的所有工作表: 如果您已经准备好边框,有时 Excel 会遇到问题,因此只需将 B 顺序设置为 None 在格式化之前。

Private Sub Workbook_Open()
  Dim wks As Worksheet

  'Loop over all Sheets
  For Each wks In ActiveWorkbook.Worksheets

    wks.Protect Password:="Secret", _
     UserInterFaceOnly:=True
  Next wks

End Sup

UserInterFaceOnly是Protect Method的可选参数,我们可以设置为True,默认为False。通过将此参数设置为 True Excel 将允许所有 Excel VBA 宏到工作表上的 运行,无论是否使用密码保护。所以你不需要一直取消保护你的工作表。

对于您的其他问题,Excel 有时会在边框已设置好时出现问题。因此,在更改边框之前尝试将边框设置为 None。

For j = 13 To 20
    With Range("H" & j & ":L" & j).Borders
         .LineStyle = xlNone
     End With
     With Range("H" & j & ":L" & j).Borders
         .LineStyle = xlContinuous  '<---Here
         .Weight = xlMedium
         .Color = RGB(255, 0, 0)
     End With
 Next j