8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何使用 VBA 清除 Office 剪贴板

Mikkel 1月前

76 0

如何使用 VBA(特别是 Word VBA)清除 Microsoft Office 剪贴板?我一次将大量数据复制到剪贴板中,并且不希望过多的数据保留在剪贴板中。

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

我一次将大量数据复制到剪贴板中,并且不希望过多的数据保留在剪贴板中。

帖子版权声明 1、本帖标题:如何使用 VBA 清除 Office 剪贴板
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Mikkel在本站《excel》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 在另一篇文章中看到这一点,并且我已经使用 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 文件导入数据。请参见 此处

  • 一个简单的

    Application.CutCopyMode = False
    

    是否适合您的情况,或者这个选项不可行?

  • 谢谢,我以前见过,但从未尝试过。它也适用于我的应用程序。它基本上删除了 CutCopy 功能,该功能会自动删除剪贴板数据。

  • 值得注意的是,这只会清除 Excel 剪贴板。如果剪贴板中还有其他内容,则不会产生任何效果。对于这个问题来说很好,但是当我在寻找清除宏中剪贴板的方法时,Google 会向我提供这个问题,而我需要真正清除剪贴板 - 而这个针对我的问题的最高票数答案实际上对我没有帮助。

  • 这是一个对我有用的解决方案。它基于 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 来清除它。

  • 多年后,但如果有人正在寻找如何在 64 位 Office 365 中执行此操作,您现在需要使用修改来实现向后兼容以使其工作:Private Declare PtrSafe 和 LongPtr 因为您对这两个值的更改将解决问题并允许它仍然工作。

  • 我刚刚使用的一个快速简便的解决方案是

    MyDoc.Range.Characters(1).Copy
    

    其中 \'MyDoc\' 是您正在使用的文档的名称。

    从技术上讲,它不会 清空 剪贴板,而只是使其长度变为一个字符(假设您的文档以字符开头),这样可以阻止 Word 弹出烦人的问题。

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

  • 如果有人像我一样,只是抓取代码并用编程锤敲打它,直到它满足您的需求:上述解决方案已更新为现代时代,并 ptrsafe longptr 添加。万一,就像我一样,您不知道它们是什么意思,而且要花很长时间才能弄清楚将它们放在哪里。

    Option Explicit
    Public Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As LongPtr
    Public Declare PtrSafe Function EmptyClipboard Lib "user32" () As LongPtr
    Public Declare PtrSafe Function CloseClipboard Lib "user32" () As LongPtr
    
    Public Function ClearClipboard()
        OpenClipboard (0&)
        EmptyClipboard
        CloseClipboard
    End Function
    
    Sub ccc()
        Call ClearClipboard
    End Sub
    
  • 此功能包含在库“Microsoft Forms 2.0 Object Library”中。要链接到该库,请转到 VBA 编辑器,然后转到“工具”、“引用”,并从列表中将其选中(如果尚未选中)。

    您可以使用一堆 WinAPI 调用来做更多有趣的事情,但我通常更喜欢避免这些操作,除非绝对必要。

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

  • 谢谢,DisplayAlerts 属性对于阻止 Excel 发出警报非常有用。我认为,对于反复从 Excel 导入数据的使用,在每个循环结束时清除剪贴板会很有帮助

  • 只是为了确认;该属性在 Word 中也可用。我还没有检查 Word 的枚举值与 Excel 的该属性的比较情况。

  • c24w 1月前 0 只看Ta
    引用 13

    我在 Word 和 Excel 中使用了 DisplayAlerts,调试器运行正常,所以我相信不会有问题。在 Word 中将使用 Application.DisplayAlerts,对于已打开的活动 Excel 程序,它与上面显示的相同

  • 引用 14

    如果在关闭工作簿时出现错误,请使用类似这样的代码

    wbk.close False
    Application.CutCopyMode = False 
    
返回
作者最近主题: