【问题标题】:Using VBA to insert and keep images in file - Excel 2013使用 VBA 在文件中插入和保存图像 - Excel 2013
【发布时间】:2023-03-23 04:32:01
【问题描述】:

我正在为我的一个朋友开发一个宏,他需要在一个 excel 文档中导入一组图像,然后在其他计算机上使用这个文档。我遇到的问题是,在另一台电脑上打开这个文档时,所有的图片都不见了,而是出现这些小错误提示,表示找不到图片路径。

我在我自己的计算机上开发了宏,我有 Excel 2007,对我来说,代码工作得很好。我的朋友使用 Excel 2013,显然,这两个版本处理图像导入和保存的方式似乎存在重大差异。

总的来说,我发现了 2 种不同的插入图像的方法。我尝试的第一个与此类似:

Set pic = ActiveSheet.Pictures.Insert("C:\documents\somepicture.jpg")

第二种方法如下所示:

Set pic = Application.ActiveSheet.Shapes.AddPicture("C:\documents\somepicture.jpg", False, True, 1, 1, 1, 1)

在第二种方法的文档中,据说第三个参数(此处为 True)负责将图片与文档一起保存。

但是,这两种方法在最终结果中看起来或多或少是相同的:它们对我来说工作正常,但如果它们在我的朋友电脑上使用 Excel 2013 执行,它们将不起作用。所以我需要的是一种解决方法对于较新的 Excel 版本(我在某处读到 Excel 2010 以上,这些图像导入方法存在错误或类似问题)。

【问题讨论】:

    标签: image excel vba shape excel-2013


    【解决方案1】:

    第一个 sn-p 工作得很好,但它不允许图片定位(即,如果您需要将图片放置在某个特定范围内),所以我根据第二种解决方案制作了一些可以很好地定位可用的东西,如下图所示。

    Dim r As Range
    Dim pic As Shape
    Set r = ActiveSheet.Range("A34:Q58")
    Set pic = ActiveSheet.Shapes.AddPicture(ThisWorkbook.Path & "\FracAnalysis.png", _
    linktofile:=msoFalse, savewithdocument:=msoCTrue, Left:=0, Top:=0, Width:=-1, Height:=-1)
    With pic
       .LockAspectRatio = msoFalse
       .Top = r.Top
       .Left = r.Left
       .Width = r.Width
       .Height = r.Height
    End with
    

    【讨论】:

      【解决方案2】:

      我通常运行一个宏,将图像从服务器下载到文件中,然后转发给无权访问该服务器的客户端。我的编码非常基础,所以我将复制用于插入图片的特定行:

      Set pic = ActiveSheet.Shapes.AddPicture(Filename:="C:\documents\somepicture.jpg", _
          linktofile:=msoFalse, savewithdocument:=msoCTrue, Left:=0, Top:=0, Width:=-1, Height:=-1)
      

      我知道它在技术上与您建议的代码相同,但请尝试使用 msoCTrue 和 msoFalse。我似乎记得这是问题的一部分。让我知道它是否有效,也许我们可以尝试其他方法。它对我有用,所以我们应该能够让它为你工作。

      【讨论】:

        【解决方案3】:

        以前的答案真的很有用!我只是想添加对方法参数的引用(我以为宽度和高度以像素为单位,结果它们以点为单位):

        https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.shapes.addpicture.ASPX

        【讨论】:

          【解决方案4】:

          在我的所有用途中,使用Insert 添加图片会引用硬盘驱动器上的文件,无论出于何种原因,如果您希望将图像嵌入到文件中,您必须添加一个形状,然后放置图像在使用AddPicture 的形状上(就像你使用的那样),我从来没有遇到过任何问题。

          另外你给图片的高度和宽度为 1 像素,你几乎永远无法看到更高的真实设置,如下所示:

          Application.ActiveSheet.Shapes.AddPicture "C:\documents\somepicture.jpg", False, True, 1, 1, 100, 100
          

          我有一种感觉,它一直都在工作,而您只是从未见过图片,因为它太小了。

          【讨论】:

          • 对我来说,它总是在所有四个值为 1 的情况下工作(我想我在某处读到 1 意味着它将使用单元格的完整宽度和高度)但为了安全起见,我尝试了更大的值 -还是一样的结果。正如我所说,这些单元格不是空的,但它们包含这个红色 X 符号和一条小错误消息,指出无法找到链接的图像。
          • 补充说明:宽度和高度可以使用-1来插入图片的实际大小。
          猜你喜欢
          • 2015-01-17
          • 2020-07-07
          • 2015-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多