Excel用户表单-从剪贴板获取HTML

Excel用户表单-从剪贴板获取HTML,excel,userform,vba,Excel,Userform,Vba,Excel 2010、2013 我在剪贴板上有一些HTML,我想通过Excel用户表单解析它 我可以使用VB.Net检索剪贴板上的格式,“HTML格式”列在返回的数组中。EXCEL VBA中的howers=MyDataobj.GetText(“HTML格式”)失败。事实上,我无法将任何参数传递到GetText()以返回任何内容。我可以将剪贴板粘贴到电子表格,Excel可以很好地粘贴HTMl表格 将数据放在剪贴板上的程序是LotusNotes,因此谁知道可能会出现什么外来格式呢 是否有一种方法可以

Excel 2010、2013

我在剪贴板上有一些HTML,我想通过Excel用户表单解析它

我可以使用VB.Net检索剪贴板上的格式,“HTML格式”列在返回的数组中。EXCEL VBA中的hower
s=MyDataobj.GetText(“HTML格式”)
失败。事实上,我无法将任何参数传递到
GetText()
以返回任何内容。我可以将剪贴板粘贴到电子表格,Excel可以很好地粘贴HTMl表格

将数据放在剪贴板上的程序是LotusNotes,因此谁知道可能会出现什么外来格式呢

是否有一种方法可以在VBA中发现DataObject中可用的格式(以及检索数据的神奇数字/字符串)

下面是我用来提取文本的代码。我应该能够通过GetText检索其他格式,但我不知道要传递的参数值

        Public Function GetText() As String
        On Error GoTo Local_err
            Dim MyData   As DataObject
            Dim strClip   As String

            Set MyData = New DataObject
            MyData.GetFromClipboard
            GetText = MyData.GetText
        local_exit:
            Exit Function
        Local_err:
            MsgBox Err & " " & Err.Description & vbCrLf & vbCrLf & "GetText from Clipboard: text not found"
            Resume local_exit
            Resume
        End Function

使用VBA,您只能从dataobject获取文本。我想您需要对该芯片进行api调用Pearson有示例代码:这可能会对您有所帮助。

您可以从VBA中的剪贴板访问其他格式

此“配方”(位于)将实现以下功能:

1) 创建新的代码模块并将以下代码放入其中:

' Clipboard functions:
Private Declare Function OpenClipboard Lib "USER32" (ByVal hWnd As Long) As Long
Private Declare Function CloseClipboard Lib "USER32" () As Long
Private Declare Function GetClipboardData Lib "USER32" (ByVal wFormat As Long) As Long
Private Declare Function IsClipboardFormatAvailable Lib "USER32" (ByVal wFormat As Long) As Long
Private Declare Function RegisterClipboardFormat Lib "USER32" Alias "RegisterClipboardFormatA" (ByVal lpString As String) As Long
' Memory functions:
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)

Public Function GetClipboardIDForCustomFormat(ByVal sName As String) As Long
    Dim wFormat As Long
    wFormat = RegisterClipboardFormat(sName & Chr$(0))
    If (wFormat > &HC000&) Then
        GetClipboardIDForCustomFormat = wFormat
    End If
End Function

Public Function GetClipboardDataAsString(ByVal hWndOwner As Long, ByVal lFormatID As Long) As String
    Dim bData() As Byte
    Dim hMem   As Long
    Dim lSize  As Long
    Dim lPtr   As Long

    ' Open the clipboard for access:
    If (OpenClipboard(hWndOwner)) Then
        ' Check if this data format is available:
        If (IsClipboardFormatAvailable(lFormatID) <> 0) Then
            ' Get the memory handle to the data:
            hMem = GetClipboardData(lFormatID)
            If (hMem <> 0) Then
                ' Get the size of this memory block:
                lSize = GlobalSize(hMem)
                If (lSize > 0) Then
                    ' Get a pointer to the memory:
                    lPtr = GlobalLock(hMem)
                    If (lPtr <> 0) Then
                        ' Resize the byte array to hold the data:
                        ReDim bData(0 To lSize - 1) As Byte
                        ' Copy from the pointer into the array:
                        CopyMemory bData(0), ByVal lPtr, lSize
                        ' Unlock the memory block:
                        GlobalUnlock hMem

                        ' Now return the data as a string:
                        GetClipboardDataAsString = StrConv(bData, vbUnicode)

                    End If
                End If
            End If
        End If
        CloseClipboard
    End If

End Function
其中49382是HTML的格式ID


您可以使用NIRSoftware免费软件显示当前剪贴板的可能多个内容以及相关的格式ID。

谢谢-我快速查看了代码,但没有找到获得其他格式的方法。我可能会使用一个临时工作表,将HTML粘贴到那里,然后从单元格中提取数据。
Dim myContent As String 
myContent = GetClipboardDataAsString(0, 49382)