2016-12-30 83 views
1

我想要允许用户在Excel中执行以下操作。这可能会使用宏来实现。Excel-vba:只从剪贴板粘贴图像+允许稍后再使用

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

我已经得到了很多:学会了如何将东西粘贴到excel的位置。我无法找到用于检查剪贴板是否保存图像的工作代码。现在我需要弄清楚如何仅粘贴图像(如何检查剪贴板在粘贴前是否仅保留图像)。下面的代码似乎不适合我。

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

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

需要注意的是一个本地驱动器上保存的图像是不是我的情况一个可行的解决方案它从剪贴板粘贴。

谢谢!

回答

0

我想通了一些解决办法,但它需要的测试。

顺便说一句,你需要去工具 - >参考 - > 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 
+0

谢谢。我会尝试并报告它是如何发生的。为了确保我理解了代码:我们使用'MSForms'来检查错误。它首先从剪贴板抓取数据,然后将其发送到msform,然后检查错误。如果检测到错误,则进入“Img”。这是我有点失落的地方:GetText是做什么的?另外,为什么'error = -2157221404?' – Baineteo

+0

您使用'GetText'从'DataObj'中获取一个String,它包含剪贴板的一个镜像。虽然剪贴板包含图像,而不是String,但GetText函数返回错误。这个错误号是-2147221404。当剪贴板为空或者包含其他类型的对象时,您必须检查是否弹出相同的错误。这就是为什么我说这是一些解决方法,但它需要测试。期待您的反馈,祝您新年快乐! :) – Limak