VBA代码冲突

标签 vba excel

我知道,我问了一个不寻常的问题。但是,请帮助我。

我在工作簿上有一个以下代码,它将负责在工作表上复制/粘贴数据。它允许我将数据粘贴到单元格中而不更改格式(仅过去的值)。

基本上,代码将使用目标格式。类似于“粘贴值”。它将允许用户粘贴任何其他格式的数据。因此该格式在各个工作表中是一致的。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim vNewValues as Variant
    NewValues = Target
    Application.EnableEvents = False
    Application.Undo
    Target = NewValues
    Application.EnableEvents = True
End Sub

除了上面的代码之外,我在工作表上还有另一个代码,它将帮助我清除内容,并且代码链接到一个按钮。因此,当按下按钮时,它将清除工作表的内容。

Private Sub ResetKey_Click()
If MsgBox("Content of the sheet will be deleted and cannot be restored", vbOKCancel + vbInformation) = vbOK Then
    Worksheets("User").Range("E19:I3018").ClearContents
Else
    Exit Sub
End If
End Sub

问题:我发现这些代码之间存在冲突。因为,当我单击按钮时,我收到错误,该错误将我指向第一个代码中的 Application.Undo 。我尝试调试代码,但无法让两者都工作。请提出建议。

enter image description here

最佳答案

这会起作用:

Private Sub ResetKey_Click()
    If MsgBox("Content of the sheet will be deleted and cannot be restored", vbOKCancel + vbInformation) = vbOK Then
        Application.EnableEvents = False
        Worksheets("User").Range("E19:I3018").ClearContents
        Application.EnableEvents = True
    Else
        Exit Sub
    End If
End Sub

也就是说,您必须抑制该工作表上其他宏中的 Change 事件。不优雅但可行。

澄清第一个宏的作用:它保存单元格的内容,撤消用户的粘贴或输入,然后仅填充粘贴的值,保持格式不变。这种方法的问题在于,事件处理程序不会返回有关触发它的操作的信息 - 它可能是粘贴,但也可能是清除单元格。

关于VBA代码冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46733777/

相关文章:

excel - 是否可以使用字符串动态调用subs

algorithm - 四舍五入到最接近的整数偶数

vba - 通过 VBA 关闭后,Textstream 对象在 Excel 中保持打开状态

vba - 创建 Excel 宏以一次删除多行

javascript - 计算两个相互引用且相互依赖的变量?类似于excel如何计算单元格?

vba - EXCEL VBA帮助-插入空白单元格的函数

java - 从 MySQL 导出表并导入到 Google Sheet

excel - 如何提示用户在 VBA 中选择文件位置以将文件合并到一个工作簿中

vba - 使用对象浏览器中未列出的对象属性

excel - 合并多个工作簿中的工作表并在所有单元格中添加带有工作表标题的新列