Excel VBA;仅在包含宏的工作簿中运行宏(覆盖默认快捷方式)

Excel VBA;仅在包含宏的工作簿中运行宏(覆盖默认快捷方式),excel,vba,Excel,Vba,我正在用宏覆盖粘贴快捷方式(ctrl-v),以仅粘贴值。 但是,我只希望在宏所在的实际工作簿中发生这种情况 这是我的代码: Sub paste_values_only() If Not ActiveWorkbook Is ThisWorkbook Then Exit Sub Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=Fal

我正在用宏覆盖粘贴快捷方式(ctrl-v),以仅粘贴值。 但是,我只希望在宏所在的实际工作簿中发生这种情况

这是我的代码:

Sub paste_values_only()
If Not ActiveWorkbook Is ThisWorkbook Then Exit Sub
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub


它似乎有效,只是当我现在在另一个工作簿中使用ctr-v时,它根本不会粘贴。。我希望ctrl-v可以像其他工作簿中的正常粘贴操作一样工作

更糟的是。。有多个工作簿将具有此粘贴覆盖宏


如果有一种更简单的方法来限制在特定工作簿中仅粘贴值,我也很高兴听到这个消息!我只是想防止我的同事将格式/条件规则/公式等粘贴到此工作簿。

经过一番努力,我找到了一个解决方案。不是很优雅,但它可以工作:

由于所有需要粘贴保护的文件名称中都有“存储”,因此我可以将粘贴限制限制限制在这些工作簿中。在else子句中使用不带特性的
Selection.PasteSpecial
,我解决了这个问题


Sub paste_values_only()

Dim wbname As String

wbname = ActiveWorkbook.Name

If wbname Like "*storage*" Then
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Else
    Selection.PasteSpecial
End If

End Sub



又涂了些肘部润滑油后,我找到了解决办法。不是很优雅,但它可以工作:

由于所有需要粘贴保护的文件名称中都有“存储”,因此我可以将粘贴限制限制限制在这些工作簿中。在else子句中使用不带特性的
Selection.PasteSpecial
,我解决了这个问题


Sub paste_values_only()

Dim wbname As String

wbname = ActiveWorkbook.Name

If wbname Like "*storage*" Then
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Else
    Selection.PasteSpecial
End If

End Sub



为了帮助您解决这个问题,我们可能需要从您的“覆盖粘贴快捷方式”代码开始。找到一种只对工作簿进行本地化的方法。没有看到你做了什么,我恐怕不知道这是否可能。。。我正在考虑使用工作簿事件。“Exit Sub”出现在哪个代码中?@FaneDuru,我编辑以包含我的完整代码。它在一个模块中。但您的代码不会覆盖Ctrl+V。它只会在活动单元格中复制剪贴板的值。。。您是否说,在运行这段代码之后,如果您尝试在另一个工作簿中使用Ctrl+C和Ctrl+V,它将不会复制包含的格式?如果您手动执行此操作,它也将在代码所在的工作簿中正常运行。只有当您使用它从剪贴板(以前复制的)粘贴内容时,它才会以这种方式运行。或者您想说在另一个工作簿中使用此代码会奇怪地复制?它不会做任何事情,因为你告诉过你!实际上,你想要什么?在“宏”菜单的“选项”下,我用ctrl-v快捷键触发了它。我想要的是防止我的同事将任何丰富的格式(条件规则、格式、公式)粘贴到相关文件中。此解决方案可行,但是任何其他打开的工作簿在使用ctrl-v时也会触发此宏,而这些工作簿需要正常的粘贴功能(带有公式等)来帮助您解决此问题,我们可能必须从“覆盖粘贴快捷方式”的代码开始。找到一种只对工作簿进行本地化的方法。没有看到你做了什么,我恐怕不知道这是否可能。。。我正在考虑使用工作簿事件。“Exit Sub”出现在哪个代码中?@FaneDuru,我编辑以包含我的完整代码。它在一个模块中。但您的代码不会覆盖Ctrl+V。它只会在活动单元格中复制剪贴板的值。。。您是否说,在运行这段代码之后,如果您尝试在另一个工作簿中使用Ctrl+C和Ctrl+V,它将不会复制包含的格式?如果您手动执行此操作,它也将在代码所在的工作簿中正常运行。只有当您使用它从剪贴板(以前复制的)粘贴内容时,它才会以这种方式运行。或者您想说在另一个工作簿中使用此代码会奇怪地复制?它不会做任何事情,因为你告诉过你!实际上,你想要什么?在“宏”菜单的“选项”下,我用ctrl-v快捷键触发了它。我想要的是防止我的同事将任何丰富的格式(条件规则、格式、公式)粘贴到相关文件中。此解决方案有效,但是任何其他打开的工作簿在使用ctrl-v时也会触发此宏,而这些工作簿需要正常的粘贴功能(使用公式等)