如何检查剪贴板中是否为空文本?

8
如果我尝试从一个空剪贴板中粘贴,就会出现错误。为了避免这种情况,我想检查剪贴板中是否为空文本。如何实现呢?我知道可以通过错误处理来完成,但我更喜欢一种避免错误的方法。
编辑--按要求添加创建错误和错误消息的代码:
导致问题的代码:
Sub PasteFromEmptyClipBoard()

    Selection.Paste

End Sub

我收到的错误信息:

在这里输入图片描述

"运行时错误'4605',此方法或属性不可用,因为剪贴板为空或无效。"


如果您能展示一下导致问题的代码以及它所生成的错误信息,那将会很有帮助。 - Cindy Meister
@CindyMeister:谢谢您,Cindy。我添加了您要求的信息,但请注意,我从一开始就回答了自己的问题。这是我几年前遇到的一个问题,我的答案中的方法是我找到的最好的方法,不依赖于错误处理。它对我非常有效。 - Jon
我错过了你回答自己的问题 - 很好的贡献 :-) 感谢您添加额外的信息,我认为它增加了问题的价值(使其更清晰)。 - Cindy Meister
@CindyMeister:我真的应该说对我来说很有效,因为我现在真的不再使用.Paste方法了。我通常使用范围,然后会用类似myRangeVariable.Text = "some text"的东西将文本放置在那里。我可能是误导了,但我认为这种方式更快。但我知道当我需要粘贴时,尝试解决空剪贴板问题是很困难的。而且我更喜欢不使用错误处理来完成它。 - Jon
1
将 Range.Text 分配给 Range.Text 确实更快,并且具有不干扰用户可能放在剪贴板上的内容的优点。或者当格式很重要时,使用 Range.FormattedText = Range.FormattedText。当涉及外部应用程序(例如 Excel)时情况不同... - Cindy Meister
1个回答

7

非常重要:在实现此代码之前,您必须首先设置对“Microsoft Forms 2.0对象库”的引用(如下附的屏幕截图所示)。当您浏览参考库时可能发现它不是一个选项。要使其显示出来,只需向项目添加一个表单(您随时可以删除该表单)。

enter image description here

Sub CheckClipboard()

        Dim myDataObject As DataObject

        Set myDataObject = New DataObject


        myDataObject.GetFromClipboard


        If myDataObject.GetFormat(1) = True Then 

            '''There is text on clipboard, so it's safe to paste

        Else 
            '''there is no text on the clipboard, so you may get error.

        End If

End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接