10

我正在为我的一个朋友开发一个宏,他需要在一个 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 向上的某个地方读到,这些图像导入方法存在错误或类似问题)。

4

4 回答 4

3

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

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

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

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

于 2013-11-11T15:13:44.957 回答
2

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

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
于 2018-05-19T09:39:23.670 回答
1

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

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

于 2015-01-31T20:25:59.077 回答
1

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

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

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

于 2015-11-10T20:09:49.420 回答