【问题标题】:Save image in excel using VBA使用VBA将图像保存在excel中
【发布时间】:2020-07-07 21:09:57
【问题描述】:

我在工作中遇到一种情况,人们必须在某个 Excel 页面中手动引入图片并手动调整其大小。作为一个完整的初学者,我设法找到一些 VBA 代码来帮助介绍图片,方法是单击一个按钮并将其插入特定范围的单元格中。我遇到的问题是我无法弄清楚(在搜索了很多帖子之后)如何正确引入保存图像的功能而不创建链接,以便其他人可以看到报告而不会出现图片不存在的错误.

你能帮我完成应该在哪里引入功能吗?

Private Sub CommandButton3_Click()
Dim strFileName As String
Dim objPic As Picture
Dim rngDest As Range
strFileName = Application.GetOpenFilename( _
    FileFilter:="Images (*.jpg;*.gif;*.png),*.jpg;*.gif;*.png", _
    Title:="Please select an image...")
If strFileName = "False" Then Exit Sub
Set rngDest = Me.Range("B24:C26")
Set objPic = Me.Pictures.Insert(strFileName)
With objPic
    .ShapeRange.LockAspectRatio = msoFalse
    .Left = rngDest.Left
    .Top = rngDest.Top
    .Width = rngDest.Width
    .Height = rngDest.Height
End With
End Sub

提前致谢!

【问题讨论】:

  • 对不起,我试过了,它给了我一个错误提示“运行时错误'448',找不到命名参数。
  • Set objPic = Me.Pictures.Insert(strFileName) 是正确的。它应该插入图像而不使其成为链接。您也可以使用Shapes.AddPicture method (Excel)。类似Dim objPic As Object 然后在下一行Set objPic = ActiveSheet.Shapes.AddPicture(strFileName, False, True, 10, 10, -1, -1)
  • @SiddharthRout 非常感谢。我已经根据您的建议在两台计算机上进行了测试,并且可以正常工作!我祝你有一个美好的一天:) 为了让其他人知道,我已经删除了这一行,因为它给出了一个错误,并按照 Siddharth 的说法添加了活动表。 codeShapeRange.LockAspectRatio = msoFalse
  • 如果您从工作表模块运行代码,那么您可以继续使用Me,但如果您从用户窗体运行此代码,那么您应该声明您的工作表对象并使用它。例如Dim ws as Worksheet,然后是Set ws = Sheet1,最后是Set objPic = ws.Shapes.AddPicture....

标签: excel vba


【解决方案1】:

试试这个:

Private Sub CommandButton3_Click()
    Dim strFileName As String
    Dim objPic As Shape '<<<
    Dim rngDest As Range
    strFileName = Application.GetOpenFilename( _
        FileFilter:="Images (*.jpg;*.gif;*.png),*.jpg;*.gif;*.png", _
        Title:="Please select an image...")
    If strFileName = "False" Then Exit Sub
    Set rngDest = Me.Range("B24:C26")

     Set objPic = Me.Shapes.AddPicture(Filename:=strFileName, _
                                       linktofile:=msoFalse, _
                                       savewithdocument:=msoCTrue, _
                                       Left:=rngDest.Left, Top:=rngDest.Top, _
                                       Width:=rngDest.Width, Height:=rngDest.Height)

End Sub

【讨论】:

  • 也非常感谢您的帮助,我按照 Siddharth 所说的进行了测试,并且成功了。希望将来有人会看到这些代码,它会对他们有所帮助。
猜你喜欢
  • 1970-01-01
  • 2015-01-17
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 1970-01-01
相关资源
最近更新 更多