粘贴前检查剪贴板的内容

时间:2011-09-09 15:22:33

标签: string excel-vba clipboard vba excel

在Excel VBA中粘贴剪贴板之前是否可以检查剪贴板的内容

我今天有这个:

Sheets.Add After:=Sheets(Sheets.Count)   ' Create new sheet
ActiveSheet.Paste                        ' Paste from Clipboard
IsMultiLevel = (InStr(Range("A1"), "Multi-Level") > 0) ' Determine type of report
If Not IsMultiLevel Then
    MsgBox ("ERROR in Clipboard Data!!")
    End
Else
    ActiveSheet.Delete
End If

我想在添加新表之前检查数据,然后我不需要删除它..我想要这样的事情

IsMultiLevel = (InStr([CLIPBOARD], "Multi-Level") > 0) ' Determine type of report
If Not IsMultiLevel Then
    MsgBox ("ERROR in Clipboard Data!!")
    End
End If
Sheets.Add After:=Sheets(Sheets.Count)   ' Create new sheet
ActiveSheet.Paste                        ' Paste from Clipboard

3 个答案:

答案 0 :(得分:3)

来自Excel 2003我必须说可以通过使用MSForms.DataObject来检查剪贴板内容。首先,您必须为Microsoft Forms 2.0对象库创建一个引用(VBA窗口工具/引用)(通常位于... \ system32 \ FM20.DLL)。

然后您可以将剪贴板读入文本变量:

Dim BufObj As MSForms.DataObject, BufTxt as String

Set BufObj = New MSForms.DataObject
BufObj.GetFromClipboard
BufTxt = Buf.GetText

缓冲区文本将保持不变(至少在Win XP / SP3,MS Office 2003 SP 3中)并可供进一步使用,即GetFromClipboard不会破坏剪贴板缓冲区。这里要考虑的是剪贴板内容可以“作为文本”使用,因此任何图形都将以原始文本模式存储。此外,需要考虑缓冲区大小,因为Excel中的可变长度字符串可以保持不超过ca. 2 ^ 31个字符(但恕我直言,这应该足以满足所有需求的90%)。

答案 1 :(得分:2)

非常感谢大家......你真了不起! 我只是想和你分享我的解决方案。

Function GetClipboardText(nChars As Integer) As String
    Dim BufObj As MSForms.DataObject
    Set BufObj = New MSForms.DataObject
    BufObj.GetFromClipboard
    GetClipboardText = Left(BufObj.GetText, nChars) ' Get only first nChars
End Function

Sub CreateOverviewSheet()
' Determine type of report in Clipboard
    IsMultiLevel = (InStr(GetClipboardText(100), "Multi-Level") > 0)
    IsConsolidated = (InStr(GetClipboardText(100), "Consolidated") > 0)
    If Not IsMultiLevel Or IsConsolidated Then
        MsgBox ("ERROR in Clipboard Data!!")
        End
    End If
    Sheets.Add After:=Sheets(Sheets.Count)   ' Create new sheet
    ActiveSheet.Paste                        ' Paste from Clipboard
    .
    .  and so on...
    .
End Sub

答案 2 :(得分:1)

请理解,除了检查可用格式列表外,无法查看剪贴板内容,而不会打扰其他应用程序。如果将数据放在剪贴板上的应用程序使用延迟渲染,您将触发无法撤消的事件(应用程序将被强制生成数据,并期望用户已粘贴数据)。这也会影响跨网络连接的剪贴板同步,例如远程桌面。 我的任何用户(ClipMate)都会对您非常恼火,并且可能会将您添加到破坏性预览剪贴板数据的应用程序的“耻辱墙”中:http://www.thornsoft.com/faq/index.php?action=artikel&cat=9&id=79