使用excel vba工作簿停用事件

使用excel vba工作簿停用事件,excel,vba,events,Excel,Vba,Events,我试图阻止用户在我正在开发的模板中粘贴除值以外的其他内容。我使用宏始终在工作表中粘贴值,请参见下文。当用户切换到其他工作簿时,应禁用此宏。 问题是激活另一个工作簿时出现错误91 '模块中的宏 Sub AlwaysPasteValues() Selection.PasteSpecial Paste:=xlPasteValues End Sub '此工作簿中的代码 Public wb As Workbook Private Sub Workbook_Activate() Applicat

我试图阻止用户在我正在开发的模板中粘贴除值以外的其他内容。我使用宏始终在工作表中粘贴值,请参见下文。当用户切换到其他工作簿时,应禁用此宏。 问题是激活另一个工作簿时出现错误91

'模块中的宏

Sub AlwaysPasteValues()
  Selection.PasteSpecial Paste:=xlPasteValues
End Sub
'此工作簿中的代码

Public wb As Workbook

Private Sub Workbook_Activate()
  Application.MacroOptions Macro:="AlwaysPasteValues", Description:="AlwaysPasteValues", ShortcutKey:="v"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Set wb = Nothing
End Sub

Private Sub Workbook_Deactivate()
  With wb
    .MacroOptions Macro:="AlwaysPasteValues", Description:="AlwaysPasteValues", ShortcutKey:=""
  End With
End Sub

Private Sub Workbook_Open()
  Set wb = ThisWorkbook
End Sub
您正在更改wb上不作为属性存在的.MacroOptions。宏选项适用于应用程序。使用与“激活”相同的代码,您应该表现良好

Private Sub Workbook_Deactivate()

    Application.MacroOptions Macro:="AlwaysPasteValues", Description:="AlwaysPasteValues", ShortcutKey:=""

End Sub

这听起来像是一个问题,所以您可以解释一下用户在模板中粘贴内容时您到底关心什么?在我看来,这似乎不是最好的方法。如果您关心字段中输入的值,您可以始终对这些单元格使用数据验证。这也只考虑使用CTRL+V进行粘贴的情况。如果我使用普通菜单粘贴公式,此代码将不会停止它。