【问题标题】:VBA Excel 2010 - Embedding Pictures and ResizingVBA Excel 2010 - 嵌入图片和调整大小
【发布时间】:2014-02-27 15:48:11
【问题描述】:

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

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

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 像素,因此丢失了原始文件分辨率。

有没有什么办法可以插入图片文件然后缩小图片大小,从而保留原来的分辨率?

【问题讨论】:

  • 只是去掉高度和宽度设置?您可能还想使用.ShapeRange.LockAspectRatio = msoTrue

标签: excel vba


【解决方案1】:

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

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 ...Dim你需要的对象并使用它们。

【讨论】:

  • 谢谢,效果非常好!我没有意识到您可以在插入对象的同时将对象设置为变量,这是我在使用的 For-Next 循环中苦苦挣扎的地方。这帮助很大,再次感谢!
  • 在旁注中,您也可以像这样分配它:set mypic = ActiveSheet.Pictures.Insert(imageName).Shaperange(1)
猜你喜欢
  • 2019-02-26
  • 2021-11-25
  • 1970-01-01
  • 2019-04-30
  • 2018-05-20
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 2017-08-01
相关资源
最近更新 更多