列出或枚举MSForms.dataObject剪贴板格式标识符

是否有可能在MSForms.dataObject剪贴板中列出或枚举格式标识符?

目前使用Excel 2007 VBA …

我有正确的引用设置,并能够设置剪贴板中的文本,并可以再次检索,如果格式标识符是已知的,并明确命名,但是有可能列出或循环所有标识符? 以下是我的非工作代码。 任何帮助或build议将不胜感激。

Sub GetTextFromClipboard() Dim DataObj As MSForms.dataObject Dim lngCounter As Long If DataObj Is Nothing Then Set DataObj = New MSForms.dataObject With DataObj .SetText "Test", "Custom_1" .PutInClipboard .SetText "Another Test", "Custom_2" .PutInClipboard .SetText "Last Test", "Custom_3" .PutInClipboard End With DataObj.GetFromClipboard 'NON-WORKING PORTION BELOW For lngCounter = LBound(Application.ClipboardFormats) To UBound(Application.ClipboardFormats) On Error Resume Next Debug.Print Application.ClipboardFormats(lngCounter) Debug.Print DataObj.GetText(lngCounter) Debug.Print DataObj.GetText(Application.ClipboardFormats(lngCounter)) On Error GoTo 0 Next 'THIS PORTION WORKS Debug.Print DataObj.GetFormat("Custom") Debug.Print DataObj.GetText("Custom") DataObj.Clear Set DataObj = Nothing End Sub 

我遇到的问题是检索剪贴板中保存的不同格式标识符的值(剪贴板数据)和名称。

预期最终结果示例:

  1) "Test", "Custom_1" 2) "Another Test", "Custom_2" 3) "Last Test", "Custom_3" 

这不是一个真正的答案,但在评论中格式化这将是可怕的。 我删除了On error resume next看到代码失败。 我正在testing你的Excel 2013的代码,因为我没有2007年,但这些应该可以帮助你。 我不这样做,你可以使用"custom"的参数,因为它只接受以下按照MSDN :

 CommaSeparatedValue Html Rtf Text UnicodeText 

我需要注释掉一些你的代码,因为它在几行中对我造成了一个错误。

 Invalid FORMATETC structure 

我会回到为什么我认为这很快发生。 我想知道xClipBoardFormattypes的友好名称,而不是枚举号。 所以我做了以下。

 Public Function ClipboardFormatToString(value As XlClipboardFormat) As String ' This will take the enum value and convert it to a string equivelent. Select Case value Case XlClipboardFormat.xlClipboardFormatBIFF ClipboardFormatToString = "Binary Interchange file format for Excel version" Case XlClipboardFormat.xlClipboardFormatBIFF12 ClipboardFormatToString = "Binary Interchange file format 12" Case XlClipboardFormat.xlClipboardFormatBIFF2 ClipboardFormatToString = "Binary Interchange file format 2" Case XlClipboardFormat.xlClipboardFormatBIFF3 ClipboardFormatToString = "Binary Interchange file format 3" Case XlClipboardFormat.xlClipboardFormatBIFF4 ClipboardFormatToString = "Binary Interchange file format 4" Case XlClipboardFormat.xlClipboardFormatBinary ClipboardFormatToString = "Binary format" Case XlClipboardFormat.xlClipboardFormatBitmap ClipboardFormatToString = "Bitmap format" Case XlClipboardFormat.xlClipboardFormatCGM ClipboardFormatToString = "CGM format" Case XlClipboardFormat.xlClipboardFormatCSV ClipboardFormatToString = "CSV format" Case XlClipboardFormat.xlClipboardFormatDIF ClipboardFormatToString = "DIF format" Case XlClipboardFormat.xlClipboardFormatDspText ClipboardFormatToString = "Dsp Text format" Case XlClipboardFormat.xlClipboardFormatEmbeddedObject ClipboardFormatToString = "Embedded Object" Case XlClipboardFormat.xlClipboardFormatEmbedSource ClipboardFormatToString = "Embedded Source" Case XlClipboardFormat.xlClipboardFormatLink ClipboardFormatToString = "Link" Case XlClipboardFormat.xlClipboardFormatLinkSource ClipboardFormatToString = "Link to the source file" Case XlClipboardFormat.xlClipboardFormatLinkSourceDesc ClipboardFormatToString = "Link to the source description" Case XlClipboardFormat.xlClipboardFormatMovie ClipboardFormatToString = "Movie" Case XlClipboardFormat.xlClipboardFormatNative ClipboardFormatToString = "Native" Case XlClipboardFormat.xlClipboardFormatObjectDesc ClipboardFormatToString = "Object description" Case XlClipboardFormat.xlClipboardFormatObjectLink ClipboardFormatToString = "Object link" Case XlClipboardFormat.xlClipboardFormatOwnerLink ClipboardFormatToString = "Link to the owner" Case XlClipboardFormat.xlClipboardFormatPICT ClipboardFormatToString = "Picture" Case XlClipboardFormat.xlClipboardFormatPrintPICT ClipboardFormatToString = "Print picture" Case XlClipboardFormat.xlClipboardFormatRTF ClipboardFormatToString = "RTF format" Case XlClipboardFormat.xlClipboardFormatScreenPICT ClipboardFormatToString = "Screen Picture" Case XlClipboardFormat.xlClipboardFormatStandardFont ClipboardFormatToString = "Standard Font" Case XlClipboardFormat.xlClipboardFormatStandardScale ClipboardFormatToString = "Standard Scale" Case XlClipboardFormat.xlClipboardFormatSYLK ClipboardFormatToString = "SYLK" Case XlClipboardFormat.xlClipboardFormatTable ClipboardFormatToString = "Table" Case XlClipboardFormat.xlClipboardFormatText ClipboardFormatToString = "Text" Case XlClipboardFormat.xlClipboardFormatToolFace ClipboardFormatToString = "Tool Face" Case XlClipboardFormat.xlClipboardFormatToolFacePICT ClipboardFormatToString = "Tool Face Picture" Case XlClipboardFormat.xlClipboardFormatVALU ClipboardFormatToString = "Value" Case XlClipboardFormat.xlClipboardFormatWK1 ClipboardFormatToString = "Workbook" Case Else ClipboardFormatToString = "Unknown" End Select End Function 

注意Case Else ... "Unknown"部分。 现在,知道格式是我在你的循环内运行。 请注意,我也有这在我的文件的开始Dim strFormat As String因为我是Option Explicit的粉丝。

 DataObj.SetText "On a scale of 1 to 10 i am awesome" DataObj.PutInClipboard DataObj.GetFromClipboard For lngCounter = LBound(Application.ClipboardFormats) To UBound(Application.ClipboardFormats) strFormat = ClipboardFormatToString(Application.ClipboardFormats(lngCounter)) Debug.Print "Format is: " & ClipboardFormatToString(Application.ClipboardFormats(lngCounter)) If strFormat <> "Unknown" Then Debug.Print DataObj.GetText(lngCounter) End If 

在我眼前的窗口里,我把下面的东西给了我

 Format is: Text On a scale of 1 to 10 i am awesome Format is: Unknown 

当我占“未知”ClipboardFormats,然后我能够返回文本没有问题。 被认为是格式的可以返回的数字是44,这不是按照这里注册的格式。 我唯一能够find的44值是来自一个没有真正解释的post。 我把这个链接包括进来 ,以表明我试图理解它。

知道你应该能够遍历并使用你想要的标识符。