使用 VBA 插入图片,Excel 2010 和 Excel 2016 之间的大小不同
Posted
技术标签:
【中文标题】使用 VBA 插入图片,Excel 2010 和 Excel 2016 之间的大小不同【英文标题】:Insert a picture using VBA, different size between Excel 2010 and Excel 2016 【发布时间】:2018-05-20 21:52:19 【问题描述】:我正在写作,因为我正在努力理解为什么在使用 VBA 导入图片时会得到 2 个不同的结果。
图片来源为:
https://maps.googleapis.com/maps/api/staticmap?size=390x280&zoom=8&maptype=terrain&markers=color:red%7Clabel:A%7C18.510516,-72.287768&key=mykey
我正在使用此 VBA 代码将图片插入单元格Z8
:
Range("Z8").Select
ActiveSheet.Pictures.Insert(URL).Select
With Selection
.ShapeRange.ScaleWidth 0.999, msoTrue
End With
*在这种特定情况下不需要.ShapeRange.ScaleWidth 0.999
,但即使我删除了With Selection
指令,我也会得到相同的输出。
如果我在 Excel 2010 中运行用于构建工作表的 VBA 代码,一切看起来都很好,如下所示:
但是当我在 Excel 2016 中运行 VBA 代码时,我得到了一些不同的东西:
本例中的图片较大且超出页面限制。您可以在左上角看到的 QR 码也是如此。垂直(和水平)分页符也已移动(我无法解释自己为什么),但我会将此问题留给另一条消息。
一般而言,Excel 2016 中的图片比 Excel 2010 中的图片大 1.25。Excel 2016 安装在另一台具有不同屏幕分辨率的笔记本电脑上。这可能是我面临的问题的原因吗?如果是这样,您是否知道以与屏幕分辨率无关的方式修复它的方法?
谢谢,斯特凡诺
【问题讨论】:
更明智的做法是在插入后通过调整大小来确保插入的图像具有一定的大小 谢谢,你是对的。我将尝试使用.ShapeRange.Width = xxx
和.ShapeRange.Height = xxx
以像素为单位分配图片大小。我的问题是:与.ShapeRange.ScaleWidth
做的事情不一样吗?我的图片是(参见 URL)390x280 像素,我不明白为什么在 Excel 2010 中一切都很好,比例因子为 1.00,而在 Excel 2016 中我需要比例因子为 0.80。
我尝试了@rlb.usa 建议的修复方法,但我得到了非常相似的结果:在 Excel 2016 中,图片比 Excel 2010 中的大,即使使用 .ShapeRange.Height = xxx
。我也刚刚意识到这可能取决于屏幕分辨率。我检查了两台笔记本电脑,使用 Excel 2010 的笔记本电脑是 1920x1080(因子比例为 113%),使用 Excel 2016 的笔记本电脑是 1920x1080(因子比例为 125%),我将进行一些额外的测试。
【参考方案1】:
Microsoft 从 Excel 2010 开始引入了新的图片分辨率和压缩处理流程,然后随着技术在接下来的几年中迅速改进,对默认值进行了调整。这可能是您的问题的原因。
您的机器之间不同的显示器尺寸/分辨率也会影响默认(和可用)设置。
即使显示器的尺寸不同,尝试将您的 Windows 显示分辨率设置为相同的值会很有帮助,至少暂时如此。
这些步骤会根据您运行的 Windows 版本而略有不同,但对 Google 来说并不难。 (例如,here 是 Windows 7 安装说明。)
检查两台计算机上的以下设置以查看哪些选项可用(未灰显)之前 更改任何内容,因为您需要决定两者都可用的设置。
默认分辨率设置
在 Excel 中,单击File
→ Options
在对话框的左侧,选择Advanced
在对话框的右侧,向下滚动到Image Size & Quality
注意哪些设置已选择,哪些设置可用:
☑ Do not compress images in file
(复选框)
Default Resolution
(下拉)
对于下一步,您需要在工作表上添加一张图片,因此您不妨使用示例中的“问题图片”。
单击图像将其选中。这应该会出现Picture Tools / Format
菜单。
点击Compress Pictures
在打开的对话框中,在Resolution
下,记下哪些设置已选择,哪些设置可用。
希望两台机器上都有一个可用的组合。将它们设置为相同后,重新启动两台机器,然后再次尝试插入图片。
正如我所提到的,可能有许多因素会影响它。确保图形在两台不同的机器上表现相同的唯一方法是它们具有相同的软件和图形硬件。
如果所有其他方法都失败了,并且您想再试一次,则有一个注册表设置可能会影响一台或两台机器。
很难找到有关 Office 数千个注册表设置的文档(许多默认情况下不使用,例如这个) - 一个 source 暗示这只会影响 Office 文档中图像的分辨率转换为网页。
但是,我相信如果您曾经将 Excel 文档保存为网页,则此注册表项(及其相关的“已知问题”)也可能会受到影响,因此您可以仔细检查。
注册表“破解”
要解决此问题,请添加以下注册表项以防止图像大小发生变化。
标准注册表警告:如果您使用注册表编辑器错误地修改注册表或使用 另一种方法。这些问题可能需要您重新安装 操作系统。 Microsoft 不能保证这些问题可以 得到解决。 修改注册表风险自负。
退出所有程序。
点击 Windows 键,输入
regedit
,然后点击 Enter。找到并选择以下注册表子项:
HKEY_CURRENT_USER\Software\Microsoft\Office\Common
选择子项后,点击
Edit
菜单,点击New
,选择DWORD Value
。键入
DownRevRasterizationDPI
,然后按Enter。右键单击
DownRevRasterizationDPI
,然后单击Modify
。在
Value
数据框中,输入1
到300
范围内的值,然后点击OK
。在
Value
数据框中,设置您要为图像指定的分辨率值。例如,如果您设置96
,这是一个 Windows 的默认屏幕分辨率值,并插入屏幕截图 进入Excel,截图的图像分辨率变为96 dpi
。在
File
菜单上,单击Exit
退出注册表编辑器。
通常我喜欢在我的答案中包含指向“更多信息”的链接,但恐怕除了源链接(上图)之外没有太多。
祝你好运!
【讨论】:
以上是关于使用 VBA 插入图片,Excel 2010 和 Excel 2016 之间的大小不同的主要内容,如果未能解决你的问题,请参考以下文章
插入代码时,打开事件中的 Excel 2010 vba EnableEvent 不起作用