离开工作表时清除选择

时间:2018-01-09 18:18:16

标签: excel vba excel-vba

我想在离开工作表时清除工作表“sheet2”上的选择。 (例如重置为单元格A1)

我试过了:

Private Sub Worksheet_Deactivate()
    ActiveSheet.Range("A1").Select
End Sub

Private Sub Worksheet_Deactivate()
    Sheets("Sheet2").Range("A1").Select
End Sub

但这不起作用。 (第一个选择当前工作表上的A1,第二个选择错误)

我想要这个的原因是因为宏选择了受保护的对象(形状控件)(锁定文本)。当用户离开并返回到工作表时,仍然选择此对象时会发生错误:

  

您不能在受保护的工作表上使用此命令。要使用此命令......等

宏首先选择对象的原因是因为用户单击了一个突出显示该对象的超链接。 (我不能想出一种不同的方式,然后'选择'来突出显示形状控件)

可能的解决方案: 我能想到的唯一另一种方法是使用Sub“Worksheet_Deactivate()”,首先激活工作表“Sheet2”将选择清除为A1,然后返回到用户最初点击时留下工作表的工作表.....但这感觉很麻烦。

还有其他解决方案/方法吗?任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

只要您不在共享工作簿中工作,这将有效:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "Sheet2" Then Sh.Protect
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh.Name = "Sheet2" Then Sh.Unprotect
End Sub

干杯!

答案 1 :(得分:0)

根据this answer,您可以使用Workbook_SheetDeactivate事件并获取WorkSheet对象,然后您可以在不切换活动工作表的情况下更改选择。

进一步阅读似乎表明Me将包含刚刚在Worksheet_Deactivate处理程序中停用的工作表,因此您也可以使用该工作表。