如何使用VBA清除Microsoft Office剪贴板,特别是Word VBA?
我正在将大量数据复制到剪贴板中,并且不希望剪贴板中保留过多的数据。
答案 0 :(得分:10)
一个简单的
Application.CutCopyMode = False
适合您的情况,或者此选项不可行?
答案 1 :(得分:7)
在另一篇文章中看到了这个,我用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
只需复制并粘贴到您需要清除剪贴板的代码中。
我注意到的另一件事是,当我.Quit
一个程序,比如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文件导入数据。见here
答案 2 :(得分:1)
此功能保存在“Microsoft Forms 2.0 Object Library”库中。要链接到该库,请转到VBA编辑器,然后选择工具,参考,如果尚未勾选则从列表中选择它。
你可以通过一堆WinAPI调用来做更多时髦的事情,但除非绝对必要,否则我通常更愿意避开它们。
另外,不要忘记DisplayAlerts属性,它会取消对话框 - 虽然我不确定它是否总会产生所需的结果。
答案 3 :(得分:1)
这是一个对我有用的解决方案。这是基于Zack Barresse在VBAexpress.com上的帖子:
Public Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function EmptyClipboard Lib "user32" () As Long
Public Declare Function CloseClipboard Lib "user32" () As Long
Public Sub ClearClipboard()
OpenClipboard (0&)
EmptyClipboard
CloseClipboard
End Sub
这是在您的VBA项目中,使用ClearClipboard
来清除它。
答案 4 :(得分:1)
我刚刚使用的一个快速简便的解决方案是
MyDoc.Range.Characters(1).Copy
其中“MyDoc”是您正在使用的文档的名称。
从技术上讲,它不会清空剪贴板,它只是让它长一个字符(假设您的文档以字符开头),这会阻止 Word 弹出烦人的问题。
纯粹主义者可能不喜欢它,但是嘿嘿,这太容易了:)