Error handling 使用GetText从剪贴板获取文本-避免在剪贴板上仅显示图形时出错
这是我在这里提出的问题的延伸: 这个问题的答案很好地避免了空剪贴板的错误,但现在我发现我还必须处理一个只包含图形而不包含文本的剪贴板,这种情况会通过空剪贴板过滤器Error handling 使用GetText从剪贴板获取文本-避免在剪贴板上仅显示图形时出错,error-handling,excel,clipboard,excel-2003,vba,Error Handling,Excel,Clipboard,Excel 2003,Vba,这是我在这里提出的问题的延伸: 这个问题的答案很好地避免了空剪贴板的错误,但现在我发现我还必须处理一个只包含图形而不包含文本的剪贴板,这种情况会通过空剪贴板过滤器 那么,当剪贴板上只有一个图形而没有文本时,如何中止该过程呢?您可以使用此代码测试剪贴板中数据的格式是否为图像 Option Explicit Private Declare Function OpenClipboard Lib "user32" _ (ByVal hwnd As Long) As Long Private Dec
那么,当剪贴板上只有一个图形而没有文本时,如何中止该过程呢?您可以使用此代码测试剪贴板中数据的格式是否为图像
Option Explicit
Private Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function GetClipboardData Lib "user32" _
(ByVal wFormat As Integer) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Const CF_BITMAP = 2
Sub Sample()
Dim RetClpB As Long
Dim RetBmp As Long
'~~> Open Clipboard
RetClpB = OpenClipboard(0&)
'~~> Check if we were successful
If RetClpB <> 0 Then
'~~> Test if the data in Clipboard is an image by
'~~> trying to get a handle to the Bitmap
RetBmp = GetClipboardData(CF_BITMAP)
'~~> If found
If RetBmp <> 0 Then
MsgBox "data in clipboad is an image"
Else
MsgBox "data in clipboad is not an image"
End If
End If
'~~> Close Clipboard
RetClpB = CloseClipboard
End Sub
选项显式
私有声明函数OpenClipboard Lib“user32”_
(ByVal hwnd As Long)一样长
私有声明函数GetClipboardData库“user32”_
(ByVal wFormat作为整数)长度相同
私有声明函数CloseClipboard Lib“user32”(长度为
常数CF_位图=2
子样本()
如长
暗淡如长
“~~>打开剪贴板
RetClpB=OpenClipboard(0&)
“~~>检查我们是否成功
如果RetClpB为0,则
“~~>通过以下方式测试剪贴板中的数据是否为图像:
“~~>正在尝试获取位图的句柄
RetBmp=GetClipboardData(CF\u位图)
“~~>如果找到
如果为0,则
MsgBox“剪贴板中的数据是图像”
其他的
MsgBox“剪贴板中的数据不是图像”
如果结束
如果结束
“~~>关闭剪贴板
RetClpB=CloseClipboard
端接头
好吧,这需要一段时间,但这里有一些方法
为了重申这个问题,我想使用DataObject.GetFromClipboard从剪贴板中提取文本,将错误捕获设置为在所有错误时中断,并且在剪贴板上找不到文本时不抛出错误
Sub TEST_getClipText()
Debug.Print getClipText
End Sub
Function getClipText() As String
Dim DataObj As MsForms.DataObject
Set DataObj = New MsForms.DataObject 'tnx jp
Dim V As Variant
For Each V In Application.ClipboardFormats
If V = xlClipboardFormatText Then
DataObj.GetFromClipboard
getClipText = DataObj.getText(1)
Exit Function
End If
Next V
MsgBox "No text on clipboard"
End Function
谢谢Siddharth,但这只能找到位图,我需要检测任何类型的图形对象,它们可以占据剪贴板上的图片槽。事实上,我认为我已经远离了我最初的问题,即在尝试使用GetText阅读之前检测剪贴板上是否有文本。看看VBA对ClipboardFormats属性的帮助,我们能不能在不使用API的情况下使用它呢?我唯一感兴趣的格式是xlClipboardFormatText。无论剪贴板上还有什么,如果该格式不可用,则我希望中止该过程。当错误捕获被设置为在所有错误上中断时,这需要在不抛出错误的情况下完成。我知道这里有一个答案,就是想逃出去:)另一种方法: