粘贴前检查剪贴板的内容

Azi*_*ziz 4 string excel clipboard vba

在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
Run Code Online (Sandbox Code Playgroud)

我希望在添加新工作表之前检查数据,然后我不需要删除它..我想要这样的东西

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
Run Code Online (Sandbox Code Playgroud)

Mik*_*keD 5

从 Excel 2003 开始​​,我必须说可以通过使用MSForms.DataObject. 首先必须创建对 Microsoft Forms 2.0 对象库(通常位于 ...\system32\FM20.DLL)的引用(VBA 窗口工具/引用)。

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

Dim BufObj As MSForms.DataObject, BufTxt as String

Set BufObj = New MSForms.DataObject
BufObj.GetFromClipboard
BufTxt = Buf.GetText
Run Code Online (Sandbox Code Playgroud)

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


Azi*_*ziz 5

非常感谢大家..!你太棒了!我只是想与你分享我的解决方案。

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
Run Code Online (Sandbox Code Playgroud)