excel - VBA Excel 2010 - 嵌入图片和调整大小

标签 excel vba

我已经潜伏了一段时间,发现它非常有帮助,所以非常感谢您的帮助!

我正在尝试编写一个宏,将单个文件中的图像嵌入到工作表中并调整它们的大小,同时在需要再次放大时保持图像的完整分辨率不变。首先我尝试过:

ActiveSheet.Pictures.Insert(imageName).Select
With Selection.ShapeRange
    .Height = 100
    .Width = 100
End With

这实际上插入了一个图片链接,如果图像文件被删除或 Excel 文件移动到另一台计算机,该链接就会被破坏。接下来我尝试了:

ActiveSheet.Shapes.AddPicture Filename:=imageName, _
    linktofile:=msoFalse, _
    savewithdocument:=msoCTrue, _
    Width:=100, _
    Height:=100

此代码也可以工作,但图像在插入之前会调整为 100 * 100 像素,因此原始文件分辨率会丢失。

有没有办法插入图像文件,然后缩小它们的大小,以便保留原始分辨率?

最佳答案

您首先以原始大小加载并定位图片,然后在第二步中根据需要调整其大小。您只需指定宽度或高度即可保留纵横比。

Sub Test()
Dim MySht As Worksheet
Dim MyPic As Shape
Dim MyLeft As Single, MyTop As Single

    ' position in Pixel relative to top/left of sheet
    MyTop = 50
    MyLeft = 50

    ' alternatively position to the top/left of [range] C3
    MyTop = [C3].Top
    MyLeft = [C3].Left

    ' alternatively position to top/left of actual scrolled position
    MyTop = Cells(Windows(1).ScrollRow, Windows(1).ScrollColumn).Top
    MyLeft = Cells(Windows(1).ScrollRow, Windows(1).ScrollColumn).Left


    Set MySht = ActiveSheet
    Set MyPic = MySht.Shapes.AddPicture("C:\Users\MikeD\Desktop\Untitled.png", _
                msoFalse, msoTrue, MyLeft, MyTop, -1, -1)
    '      ^^^  LinkTo    SaveWith                -1 = keep size

    ' now resize pic
    MyPic.Height = 100

End Sub

...并尽量避免.Select ...调暗您需要的对象并使用它们。

关于excel - VBA Excel 2010 - 嵌入图片和调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22073463/

相关文章:

xml - 如何通过 VBA 读取和修改 XML 文件?

c# - Azure - 'Microsoft.ACE.OleDb.12.0' 提供程序未在本地计算机上注册

xml - Excel“从xml数据导入”不会添加新列

excel - 在VBA中创建可循环容器类

excel - 如果 VBA 中出现错误?

vba - Access 2010访问PostgreSQL无法更新

excel - 如何从 Excel 列表中查找和替换

sql - 将 Excel 工作表中的数据写回 SQL

arrays - Excel UDF 接受范围和数组作为参数,如 'SUM'

vba - 使用范围时 Excel VBA 错误 1004