【问题标题】:VBA Select and Copy Not Working After Adding Locked/Unlocked Cells in Excel在 Excel 中添加锁定/解锁的单元格后,VBA 选择和复制不起作用
【发布时间】:2020-02-12 02:47:31
【问题描述】:

我创建了一个带有命令按钮(Active X 控件)的 Excel 工作表。该按钮选择并复制单元格 e2:e16,e106:e117。

我还添加了代码来锁定或解锁单元格 C112 和 C116,具体取决于单元格 C3。如果 C3 如果为“1”,则单元保持解锁状态,如果为“2”,则单元锁定。

工作表开始受到保护,因此大多数单元格都被锁定,除了需要输入数据的单元格。

当 ActiveSheet.Protect "" 被注释掉时,它会正确复制,但在我将 C3 更改为 "1" 或 "2" 后,工作表不会保护自己。

如果没有注释掉“ActiveSheet.Protect”,则锁定/解锁有效,但它会尝试选择和复制单元格 C3 并忽略它应该选择和复制的范围。

我希望两者一起工作。

左上角的'ActiveSheet.Protect 被注释掉了。

点击 Copy Narrative 按钮后右上角,它选择并复制正确的区域,但整个工作表不受保护。

左下角 ActiveSheet.Protect 没有被注释掉。

点击 Copy Narrative 后右下角会选择并复制单元格 C3。

选择并复制单元格:

Private Sub copyButton_Click()

    'Check for blanks'
    If Range("c3").Value = "" Or _
        Range("c6").Value = "" Or _
        Range("c7").Value = "" Or _
        Range("c8").Value = "" Or _
        Range("c9").Value = "" Or _
        Range("c10").Value = "" Or _
        Range("c108").Value = "" Or _
        Range("e16").Value = "" Or _
        Range("e106").Value = "" Or _
        Range("e115").Value = "" Then
        MsgBox "Required fields are blank."
    Exit Sub
    Else

    'Copy Ranges
    Range("e2:e16,e106:e117").Select
    Selection.Copy

    End If

End Sub

锁定/解锁单元格:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

   'Change cells locked/unlocked
     ActiveSheet.Unprotect ""
     If Range("C3").Value = "1" Then
      Range("C112,c116").Locked = False
     Else: Range("C3").Value = "2"
      Range("C112,c116").Locked = True
     End If
     ActiveSheet.Protect ""

End Sub

【问题讨论】:

    标签: excel vba locked


    【解决方案1】:

    我觉得你应该

    A.复制范围前取消保护

    或者

    B.在“copyButton_Click”运行期间不要调用“Worksheet_SelectionChange”

    blow 代码是案例 B

    Private Sub copyButton_Click()
        'Dont Call Sheet events
        Application.EnableEvents = false
        'Check for blanks'
        If Range("c3").Value = "" Or _
            Range("c6").Value = "" Or _
            Range("c7").Value = "" Or _
            Range("c8").Value = "" Or _
            Range("c9").Value = "" Or _
            Range("c10").Value = "" Or _
            Range("c108").Value = "" Or _
            Range("e16").Value = "" Or _
            Range("e106").Value = "" Or _
            Range("e115").Value = "" Then
            MsgBox "Required fields are blank."
        Exit Sub
        Else
    
        'Copy Ranges
        Range("e2:e16,e106:e117").Select
        Selection.Copy
    
        End If
        'rollBack
        Application.EnableEvents = True
    End Sub
    
    
    

    【讨论】:

      猜你喜欢
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      相关资源
      最近更新 更多