Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
系统锁定excel工作表的代码,仅处理1个电子表格(VB)_Excel_Vba - Fatal编程技术网

系统锁定excel工作表的代码,仅处理1个电子表格(VB)

系统锁定excel工作表的代码,仅处理1个电子表格(VB),excel,vba,Excel,Vba,我基本上是在excel中系统地锁定除一张工作表之外的所有工作表。我已经开发了下面的代码,但是,它似乎只锁定了许多表中的1个表Dec。任何帮助都将不胜感激。谢谢 Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim ws As Worksheet Dim strPassWord As String strPassWord = "apple" Sheets("Jan").Select Sheets("Feb").Select S

我基本上是在excel中系统地锁定除一张工作表之外的所有工作表。我已经开发了下面的代码,但是,它似乎只锁定了许多表中的1个表Dec。任何帮助都将不胜感激。谢谢

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 Dim ws As Worksheet
 Dim strPassWord As String
 strPassWord = "apple"

 Sheets("Jan").Select
 Sheets("Feb").Select
 Sheets("Mar").Select
 Sheets("April").Select
 Sheets("May").Select
 Sheets("June").Select
 Sheets("July").Select
 Sheets("Aug").Select
 Sheets("Sept").Select
 Sheets("Oct").Select
 Sheets("Nov").Select
 Sheets("Dec").Select
 ActiveSheet.Protect Password:=strPassWord, DrawingObjects:=True, Contents:=True, Scenarios:=True
 ActiveSheet.EnableSelection = xlNoSelection

End Sub

Private Sub Workbook_Open()
 Dim ws As Worksheet
 Dim strPassWord As String
 strPassWord = InputBox(Prompt:="Password", _
  Title:="Enter Password", Default:="User Password")

 If strPassWord = "apple" Then

  Sheets("Jan").Select
  Sheets("Feb").Select
  Sheets("Mar").Select
  Sheets("April").Select
  Sheets("May").Select
  Sheets("June").Select
  Sheets("July").Select
  Sheets("Aug").Select
  Sheets("Sept").Select
  Sheets("Oct").Select
  Sheets("Nov").Select
  Sheets("Dec").Select
  ActiveSheet.Unprotect Password:=strPassWord
 Else
  MsgBox ("Password Incorrect")
 End If
End Sub

既然已经内置到Excel中,为什么还要编写代码来执行此操作?请参见“保护工作表”?重新发明轮子通常不是一个好主意,安全性加倍,当你硬编码密码时,密码很容易被发现


但要回答你的核心问题。ActiveSheet仅指顶部的工作表,而不是所有您调用select on的工作表。

您需要选择工作表,然后对其进行密码保护。select函数更改活动表。它不会添加到选择中。这最好通过将锁定代码移动到函数中,然后在选择每个工作表后调用该函数来实现

解锁工作表需要进行类似的调整

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim ws As Worksheet
    Dim strPassWord As String
    strPassWord = "apple"

    Sheets("Jan").Select
    Call LockSheet
    Sheets("Feb").Select
    Call LockSheet
    Sheets("Mar").Select
    Call LockSheet
    Sheets("April").Select
    Call LockSheet
    Sheets("May").Select
    Call LockSheet
    Sheets("June").Select
    Call LockSheet
    Sheets("July").Select
    Call LockSheet
    Sheets("Aug").Select
    Call LockSheet
    Sheets("Sept").Select
    Call LockSheet
    Sheets("Oct").Select
    Call LockSheet
    Sheets("Nov").Select
    Call LockSheet
    Sheets("Dec").Select
    Call LockSheet

End Sub

Private Sub LockSheet

    ActiveSheet.Protect Password:=strPassWord, DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveSheet.EnableSelection = xlNoSelection
End Sub

据我所知,ActiveSheet不能以这种方式使用。根据文件:

激活的板材位于顶部的板材上;如果没有工作表处于活动状态,则在Visual Basic中为空引用Nothing

它将仅锁定您选择的最后一张图纸。相反,您最好使用以下代码:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim ws As Worksheet
    Dim strPassWord As String

    strPassWord = "apple"

    Call LockSheet(Sheets("Sheet1"))
    Call LockSheet(Sheets("Sheet2"))
    Call LockSheet(Sheets("Sheet3"))

End Sub

Private Sub Workbook_Open()
    Dim ws As Worksheet
    Dim strPassWord As String
    strPassWord = InputBox(Prompt:="Password", _
                            Title:="Enter Password", Default:="User Password")

    If strPassWord = "apple" Then
        Call UnlockSheet(Sheets("Sheet1"), strPassWord)
        Call UnlockSheet(Sheets("Sheet2"), strPassWord)
        Call UnlockSheet(Sheets("Sheet3"), strPassWord)
    Else
        MsgBox ("Password Incorrect")
    End If

End Sub

Private Sub LockSheet(sheet As Worksheet)
    sheet.Protect password:=strPassWord, DrawingObjects:=True, Contents:=True, Scenarios:=True
    sheet.EnableSelection = xlNoSelection
End Sub

Private Sub UnlockSheet(sheet As Worksheet, strPassWord As String)
    sheet.Unprotect password:=strPassWord
End Sub

因为用户必须记住重新保护纸张等。。。解锁后。很可能他们必须编辑每个工作表,这意味着解锁所有工作表,然后分别重新保护所有工作表,这是一个真正的难题。如果在打开文件时自动取消工作表的保护,那么保护工作表有什么意义呢?你就是那个人!工作完美,正是我想要的。非常感谢!