VBA Select 并且在 Excel 中添加 Locked/Unlocked 个单元格后复制不起作用
VBA Select and Copy Not Working After Adding Locked/Unlocked Cells in Excel
我创建了一个 Excel Sheet,它有一个命令按钮(Active X 控件)。按钮 select 并复制单元格 e2:e16,e106:e117。
我还添加了代码以根据单元格 C3 锁定或解锁单元格 C112 和 C116。如果 C3 为“1”,则单元格保持解锁状态,如果为“2”,则单元格锁定。
sheet 开始受保护,因此除了需要输入数据的单元格外,大多数单元格都被锁定。
当 ActiveSheet.Protect "" 被注释掉时,它可以正确复制,但是 sheet 在我将 C3 更改为 "1" 或 "2" 后不会保护自己。
如果 'ActiveSheet.Protect "" 没有被注释掉 lock/unlock 有效,但它会尝试 select 并复制单元格 C3 并忽略它假设的范围 select并复制。
我希望两者一起工作。
左上'ActiveSheet.Protect注释掉了。
点击“复制叙述”按钮后右上角 select 复制了正确的区域,但整个 sheet 未受保护。
左下 ActiveSheet.Protect 未注释掉。
点击 Copy Narrative 后右下 selects 并复制单元格 C3。
Select 并复制单元格:
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
Lock/Unlock 单元格:
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
我认为你应该
一个。复制前取消保护范围
或者
乙。不要在 "copyButton_Click" 运行期间调用 "Worksheet_SelectionChange"
打击代码为案例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
我创建了一个 Excel Sheet,它有一个命令按钮(Active X 控件)。按钮 select 并复制单元格 e2:e16,e106:e117。
我还添加了代码以根据单元格 C3 锁定或解锁单元格 C112 和 C116。如果 C3 为“1”,则单元格保持解锁状态,如果为“2”,则单元格锁定。
sheet 开始受保护,因此除了需要输入数据的单元格外,大多数单元格都被锁定。
当 ActiveSheet.Protect "" 被注释掉时,它可以正确复制,但是 sheet 在我将 C3 更改为 "1" 或 "2" 后不会保护自己。
如果 'ActiveSheet.Protect "" 没有被注释掉 lock/unlock 有效,但它会尝试 select 并复制单元格 C3 并忽略它假设的范围 select并复制。
我希望两者一起工作。
左上'ActiveSheet.Protect注释掉了。
点击“复制叙述”按钮后右上角 select 复制了正确的区域,但整个 sheet 未受保护。
左下 ActiveSheet.Protect 未注释掉。
点击 Copy Narrative 后右下 selects 并复制单元格 C3。
Select 并复制单元格:
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
Lock/Unlock 单元格:
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
我认为你应该
一个。复制前取消保护范围
或者
乙。不要在 "copyButton_Click" 运行期间调用 "Worksheet_SelectionChange"
打击代码为案例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