ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何直接将工作表中图片加载至IMAGE控件中(不另存图片文件)

如何直接将工作表中图片加载至IMAGE控件中(不另存图片文件)

作者:绿色风 分类: 时间:2022-08-17 浏览:82
楼主
xmyjk
Q:如何直接将工作表中图表加载至IMAGE控件中(不另存图片文件)

A:思路,直接复制图片,然后访问剪贴板,将图片直接从剪贴板里头乾坤大挪移至IMAGE控件中。
  1. Private Declare Function OpenClipboard Lib "User32" (ByVal hWnd As Long) As Long
  2. Private Declare Function CloseClipboard Lib "User32" () As Long
  3. Private Declare Function GetClipboardData Lib "User32" (ByVal uFormat As Long) As Long
  4. Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long

  5. Private Type GUID
  6.     Data1 As Long
  7.     Data2 As Integer
  8.     Data3 As Integer
  9.     Data4(0 To 7) As Byte
  10. End Type

  11. Private Type PicBmp
  12.     Size As Long
  13. Type As Long
  14.     hBmp As Long
  15.     hPal As Long
  16.     Reserved As Long
  17. End Type
  18. Dim d

  19. Private Sub ListBox1_Click()
  20.     Dim i%, Pic As PicBmp, IPic As IPicture, IID_IDispatch As GUID
  21.     For i = 2 To 5
  22.         If Cells(i, 1) = ListBox1.Text Then
  23.             Label3.Caption = Cells(i, 1)
  24.             Label4.Caption = Cells(i, 2)
  25.             d(Label3.Caption & "|" & Label4.Caption).CopyPicture 1, 2
  26.             OpenClipboard 0
  27.             With IID_IDispatch
  28.                 .Data1 = &H20400
  29.                 .Data4(0) = &HC0
  30.                 .Data4(7) = &H46
  31.             End With
  32.             With Pic
  33.                 .Size = Len(Pic)
  34.                 .Type = 1
  35.                 .hBmp = GetClipboardData(2)
  36.             End With
  37.             CloseClipboard
  38.             OleCreatePictureIndirect Pic, IID_IDispatch, 1, IPic
  39.             Set Image1.Picture = IPic
  40.         End If
  41.     Next
  42. End Sub


  43. Private Sub UserForm_Initialize()
  44.     Dim sh As Shape
  45.     Set d = CreateObject("scripting.dictionary")
  46.     For Each sh In Sheet1.Shapes
  47.         If sh.Type = msoPicture Then
  48.             Set d(sh.TopLeftCell.Offset(, -2) & "|" & sh.TopLeftCell.Offset(, -1)) = sh
  49.         End If
  50.     Next
  51. End Sub

image图片.rar
2楼
亡者天下
谢谢分享
3楼
老糊涂
谢谢分享

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap