如何用VBA清除Office剪贴板

如何用VBA清除Office剪贴板,vba,ms-word,Vba,Ms Word,如何使用VBA,特别是Word VBA清除Microsoft Office剪贴板 我正在将大量数据复制到剪贴板中,不想在剪贴板中保留过多的数据。在另一篇文章中看到了这一点,我用Word VBA对其进行了测试 'Clearing the Office Clipboard Dim oData As New DataObject 'object to use the clipboard oData.SetText text:=Empty 'Clear oData.Put

如何使用VBA,特别是Word VBA清除Microsoft Office剪贴板


我正在将大量数据复制到剪贴板中,不想在剪贴板中保留过多的数据。

在另一篇文章中看到了这一点,我用Word VBA对其进行了测试

'Clearing the Office Clipboard

    Dim oData   As New DataObject 'object to use the clipboard

    oData.SetText text:=Empty 'Clear
    oData.PutInClipboard 'take in the clipboard to empty it
只要在需要清除剪贴板的地方复制并粘贴到代码中即可

我注意到的另一件事是,当我退出一个程序(比如Excel)时,它总是问我是否想保留剪贴板上的数据。解决方法是使用上述代码清除剪贴板。见下文:

'Clearing the Office Clipboard

    Dim oData   As New DataObject 'object to use the clipboard

    oData.SetText text:=Empty 'Clear
    oData.PutInClipboard 'take in the clipboard to empty it


'You can also just remove the Alert Messages from the Excel Program while    
'the code is running
'Remove alert Messages from the Excel Program when closing
ExcelProgram.DisplayAlerts = False   

'Quiting the Excel Application
ExcelProgram.Quit

我在VBA代码中使用上述示例从Excel文件导入数据。请参见

此功能保存在库“Microsoft Forms 2.0对象库”中。若要链接到该库,请转到VBA编辑器,然后单击“工具”、“引用”并从列表中选择它(如果尚未选中)

你可以用一堆WinAPI调用来做一些更时髦的事情,但我通常更喜欢避免这些,除非绝对必要

另外,不要忘记DisplayAlerts属性,它将抑制对话框,尽管我不确定它是否总能产生所需的结果。

这是一个简单的方法

Application.CutCopyMode = False

为您的情况工作,还是这个选项不可行?

这里有一个对我有效的解决方案。这是基于Zack Barresse的一篇文章:


将此函数复制到VBA项目后,请使用
ClearClipboard
将其清除。

我刚才使用的一个简单快捷的解决方案是

MyDoc.Range.Characters(1).Copy
其中“MyDoc”是您正在使用的文档的名称

从技术上讲,它不会清空剪贴板,它只会使剪贴板变为一个字符长(假设您的文档以字符开头),从而防止Word出现令人讨厌的问题


纯粹主义者可能不喜欢它,但嘿,它非常简单:)

谢谢你,DisplayAlerts属性在阻止Excel发出警报方面发挥了巨大作用。我认为,对于反复从Excel导入数据的使用,在每个
循环结束时清除剪贴板以进行确认将是有益的;该属性在Word中也可用。我没有检查Word的枚举值与Excel的枚举值在该属性上的比较。我在Word和Excel中使用了
DisplayAlerts
,调试器很高兴,所以我相信它会很好。在Word中将使用
应用程序。显示警报
,对于已打开的活动Excel程序,它与上面显示的程序相同。谢谢,我以前见过,但从未尝试过。它也适用于我的应用程序。它基本上删除了CutCopy函数,该函数将自动删除剪贴板数据。我喜欢这种解决方案,因为它不需要添加对对象库的引用。值得注意的是,这只会清除Excel剪贴板。如果剪贴板中还有其他内容,则此操作无效。这个问题很好,但当我在寻找一种方法来清除宏中的剪贴板时,谷歌为我提供了这个问题,为此我需要真正清除剪贴板-而这个对我的问题投票率最高的答案实际上对我没有帮助。几年后,如果有人正在寻找如何在64位以下的Office 365中做到这一点,现在需要使用向后兼容性的修改来实现这一点:Private Declare PtrSafe和LongPtr,因为对这些值的两个更改将解决问题,并允许它继续工作。
MyDoc.Range.Characters(1).Copy