【问题标题】:Excel-vba: Pasting Image only from Clipboard + allowing for re-use laterExcel-vba:仅从剪贴板粘贴图像+允许以后重复使用
【发布时间】:2016-12-30 18:26:13
【问题描述】:

我想允许用户在 excel 中进行以下操作。这可能会使用宏来实现。

  1. 用户使用截图工具截取屏幕截图
  2. 代码检查剪贴板是否包含图像(代码仅在剪贴板包含图像时运行)
  3. 然后代码会将图像从剪贴板粘贴到指定区域(例如单元格 J55)。
  4. 同时,我想给这个粘贴的图像一个 ID(比如 imgSource1),以便用户以后可以在另一张纸上重新使用这个图像(比如,在第二张纸上,调用 imgSource1 并粘贴它在那里)

到目前为止,我已经学会了如何在上述位置将某些内容粘贴到 excel 中。我无法找到用于检查剪贴板是否包含图像的工作代码。现在我需要弄清楚如何只粘贴图像(如何检查剪贴板在粘贴之前只保存图像)。以下代码似乎对我不起作用。

Sub btn_addImg1()
If (Clipboard.GetImage() != null)
    Sheet1.Paste Destination:=Range("J55"), Link:=False
Else
    'do nothing
End If

If (Clipboard.GetImage()"”行是红色的,它告诉我在“!=”处需要一个“)”。

请注意,在我的情况下,将图像保存在本地驱动器上并不是一个可行的解决方案。它必须从剪贴板粘贴。

谢谢!

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我想出了一些解决方法,但它需要测试。

    顺便说一句,您需要转到工具 -> 参考 -> Microsoft Forms 2.0 Oject Librarty 才能使MSForms 工作。

        Sub btn_addImg1()
        Dim DataObj As New MSForms.DataObject
        DataObj.GetFromClipboard
        On Error GoTo Img
            GetClipboardText = DataObj.GetText
        On Error GoTo 0
    Img:
        If Err = -2147221404 Then
            Err = 0
            Sheet1.Paste Destination:=Sheet1.Range("J55"), Link:=False
        Else
            'do nothing
        End If
        End Sub
    

    【讨论】:

    • 谢谢。我会尝试并报告情况如何。只是为了确保我理解代码:我们使用MSForms 来检查错误。它首先从剪贴板抓取数据,然后将其发送到 msform,然后检查错误。如果检测到错误,则会转到Img。这就是我有点迷茫的地方:GetText 做了什么?还有,为什么是error =-2157221404?
    • 您使用GetTextDataObj 获取字符串,其中包含剪贴板的镜像。当您的剪贴板包含图像而不是字符串时,GetText 函数会返回错误。此错误编号为 -2147221404。当剪贴板为空或包含其他类型的对象时,您必须检查是否弹出相同的错误。这就是为什么我说这是一些解决方法,但需要测试。期待您的反馈,祝您新年快乐! :)
    猜你喜欢
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 2013-07-08
    相关资源
    最近更新 更多