首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >粘贴前检查剪贴板内容

粘贴前检查剪贴板内容
EN

Stack Overflow用户
提问于 2011-09-09 23:22:33
回答 3查看 12.2K关注 0票数 3

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

我今天要说的是:

代码语言:javascript
复制
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

但是我想在添加新的工作表之前检查数据,这样我就不需要删除它了。我想要这样的东西

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-12 15:14:56

来自Excel2003,我必须说通过使用MSForms.DataObject来检查剪贴板内容是可能的。首先必须创建一个对Microsoft forms2.0对象库(通常位于...\system32\FM20.DLL)的引用(VBA窗口工具/引用)。

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

代码语言:javascript
复制
Dim BufObj As MSForms.DataObject, BufTxt as String

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

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

票数 4
EN

Stack Overflow用户

发布于 2011-09-12 21:23:05

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

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2011-09-11 07:41:34

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7363907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档