Word vba如何将图片从图像对象保存到文件?

问题描述 投票:0回答:4

我在用户窗体上有一个图像对象。我想将该图像对象中的图片保存到文件中。我看到很多关于如何将图片加载到图像对象中的示例,但没有其他方法。

我尝试过

stdole.SavePicture obj.Picture, strFilePath
,但这仅适用于按钮对象。

image vba ms-word userform
4个回答
2
投票

首先创建一个图表。 将图片放在图表中的第二位。 最后导出图表。

编辑#1

示例代码请参见:

用VBA保存图片


1
投票

我不知道这是否有帮助,但我尝试将 Picture 对象转换为 IPictureDisp 对象,以将其传递给 stdoleSavePicture 函数,它对我有用。

这是代码:

Dim pic As IPictureDisp

Set pic = myForm.Image1.Picture

stdole.SavePicture pic, "C:\myfile.jpg"

0
投票

我使用 PowerPoint 来做这件事。这是最近一个导出世界地图的项目中的宏:

Public Sub ExportMap()
Dim pptPres As PowerPoint.Presentation
Dim pptSlide As PowerPoint.Slide
Dim pptShapeRange As PowerPoint.ShapeRange
Dim Path$, File$
Dim oRange As Range

  Application.ScreenUpdating = False
  myDate$ = Format(Date, "m-d-yyyy")
  Set pptApp = CreateObject("PowerPoint.Application")
  Path$ = ActiveDocument.Path & Application.PathSeparator
  File$ = "WorldMap " & myDate$ & ".png"
  Set pptPres = pptApp.Presentations.Add(msoFalse)
  
  Set oRange = ActiveDocument.Bookmarks("WholeMap").Range
  oRange.CopyAsPicture
  
  Set pptSlide = pptPres.Slides.Add(1, ppLayoutBlank)
  On Error Resume Next
  With pptPres.PageSetup
    .SlideSize = 7
    .SlideWidth = 1150
    .SlideHeight = 590
  End With
  Set pptShapeRange = pptSlide.Shapes.PasteSpecial(ppPasteEnhancedMetafile, Link:=msoFalse)
  
  pptSlide.Export Path$ & File$, "PNG"
  
  pptApp.Quit
  
  Set pptPres = Nothing
  Set pptApp = Nothing
  Set pptSlide = Nothing
  Application.ScreenUpdating = True
  MsgBox "All done! Check the folder containing this template for a file called '" & File$ & "'."
End Sub

0
投票

这是一个非常有效并且非常容易实现的解决方案。您所需要的只是一个名为 Magick.exe 的简单命令行程序,您可以从此处下载 在此处下载 这是我用来首先扫描文档中的图像的代码,您可以根据需要进行更改以达到您的目的。下一部分将是实际保存图像,因为我们使用此网站上的许多方法似乎将文件保存为 PNG 或 JPG,但由于我们都知道,这些不是真正的 PNG 或 JPG 文件,如所讨论的在许多论坛上。

两条主线是:

设置 objShell = CreateObject("WScript.Shell") objShell.exec (ActiveDocument.path & "\magick.exe """ & Environ("TEMP") & "\Temp.png""" & " """ & Environ("TEMP") & "\Temp.jpg “””) 您可以根据需要进行更改。

这是完整的代码片段,效果非常好! 公共子 ScanImagesInDocument() '==================================================== =================================================== ===== '这是我们运行的代码 将 tempFilePath 变暗为字符串 将 k 调暗为整数 调暗 imgRange 作为范围 暗淡 shapePage 作为整数 对于 k = 1 到 ActiveDocument.InlineShapes.count ' 获取当前内联形状的范围 设置 imgRange = ActiveDocument.InlineShapes(k).range ' 定义图像的临时文件路径 tempFilePath = Environ("TEMP") & "\Temp.png" ' 将图像另存为 PNG 调用 saveImage(ActiveDocument.InlineShapes(k), tempFilePath) ' 将范围折叠到内联形状的末尾 imgRange.Collapse wdCollapseEnd ' 将选择移动到内联形状之后 imgRange.Select 结束如果 下一个 k 结束子

函数 saveImage(shp As InlineShape, path As String) ' 这是首先将文件保存为 png 文件的代码,但据了解这不是真正的 PNG 文件 ’最后就是奇迹发生的地方。

Dim s As String
Dim r As range
Dim i As Long
Dim j As Long
s = shp.range.WordOpenXML
i = InStr(s, "<pkg:binaryData>")
If i = 0 Then
    Set r = shp.range.Duplicate
    r.End = r.End + 1
    s = r.WordOpenXML
    i = InStr(s, "<pkg:binaryData>")
    If i = 0 Then
        r.Start = r.Start - 1
        s = r.WordOpenXML
        i = InStr(s, "<pkg:binaryData>")
        If i = 0 Then
            MsgBox "No binary data found"
            Exit Function
        End If
    End If
End If
''move i to end of "<pkg:binaryData>"
i = i + 16
j = InStr(i, s, "</pkg:binaryData>")
s = Mid$(s, i, j - i)
Dim DecodeBase64() As Byte
Dim objXML As Object 'MSXML2.DOMDocument
Dim objNode As Object 'MSXML2.IXMLDOMElement
Set objXML = CreateObject("MSXML2.DOMDocument")
'create node with type of base 64 and decode
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.text = s
DecodeBase64 = objNode.nodeTypedValue
Set objNode = Nothing
Set objXML = Nothing
Open path For Binary As #1
    Put #1, 1, DecodeBase64
Close #1
Dim objShell As Object
tempPng = Environ("TEMP") & "\Temp.png"
tempJpg = Environ("TEMP") & "\Temp.jpg"

' 这就是我们解决文件没有真正保存为 PNG 文件的整个问题的地方 '==================================================== =============================================
设置 objShell = CreateObject("WScript.Shell") objShell.exec (ActiveDocument.path & "\magick.exe """ & Environ("TEMP") & "\Temp.png""" & " """ & Environ("TEMP") & "\Temp.jpg “””) 结束功能

© www.soinside.com 2019 - 2024. All rights reserved.