【问题标题】:VBA dynamic picturesVBA动态图片
【发布时间】:2018-08-08 17:31:37
【问题描述】:

我正在尝试根据单元格值将图片插入到 Excel 中。单元格值位于图像路径中。我是新人,我所拥有的部分是基于记录宏和部分查找内容。这是我尝试过的......

我在ActiveSheet.Pictures.Insert 行上不断收到错误

Sub Part_Picture()
'
' Part_Picture Macro
'
Dim imageName As String
Dim imageFolder As String
Dim imagePath As String

For Each Cell In Range("B7")
    imageName = Cell.Value
    imageFolder = "Q:\New Project Part Folders\Elizabeth Delgado\Database pictures\Part\" & imageName
    imagePath = imageFolder & ".jpg"

    Range("B11").Select
    '
    ActiveSheet.Pictures.Insert(imagePath).Select
Next Cell
End Sub

【问题讨论】:

  • 问题是什么?你想要的代码没有做什么?如果您希望代码将图片放置在工作簿的不同区域,请告诉我们您希望如何插入它们......即 - 每 8 行或其他内容。
  • 摆脱所有.Select 的东西,这是宏记录器毒药,通过模仿记录的每一个用户操作来教你错误的东西。例如执行For Each cell In Range("B7:G9"),并声明cell 变量(在模块顶部指定Option Explicit) - 然后是的,问一个可以回答的明确问题。
  • @Mat'sMug "macro-recordertoxic" -- 我喜欢这个短语,虽然我可能更喜欢 "crud" 而不是 "poison"(保留 "poison" 以供 On Error Resume Next 的一揽子使用)。
  • 您到底收到了什么错误信息?它是在第一次迭代时爆炸还是正确处理了几个单元格? B7:G9 中的数据是什么样的?当事情爆发时,imageFolder 的价值是多少?请在ActiveSheet.Pictures.Insert 指令上设置断点 (F9),运行代码,然后使用 立即窗格locals 调试器工具窗口来帮助您找出问题所在。
  • 您的 ImagePath 是否只有名称(没有“.jpg”)?该变量名称有点误导,因为您的代码使它看起来应该是 ImageName。

标签: vba excel


【解决方案1】:

“无法获取图片类的插入属性”是一个通用错误消息,您不妨将其翻译为“您尝试执行的操作出现问题,我无法为您提供更多信息” .可能是图像文件的路径没有正确构建。

1) 从插入语句中删除.Select。从语法上讲,它没有意义。只需使用ActiveSheet.Pictures.Insert(imagePath)

2) 检查单元格 B7 中的值仅是文件名,不包括扩展名。由于您的代码添加了“.jpg”,因此您在 B7 中不需要它。

3) 检查文件实际上是 jpg,而不是例如 png

4) 检查文件/文件夹是否实际存在

仅供参考For Each Cell In Range("B7") 只会迭代一个单元格 - B7 - 并且是不必要的。如果您只打算读取一个单元格,您应该使用imageName = Range("B7").Value,或者更好,因为您需要一个字符串使用imageName = Range("B7").Text

【讨论】:

  • 非常感谢 @absinthe 我做了 #1 的更改,然后你在 FYI 中建议的更改,效果很好!
【解决方案2】:

考虑这个选项。

Sub InsertPics()
Dim fPath As String, fName As String
Dim r As Range, rng As Range

Application.ScreenUpdating = False
fPath = "C:\your_path_here\"
Set rng = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
i = 1

For Each r In rng
    fName = Dir(fPath)
    Do While fName <> ""
        If fName = r.Value Then
            With ActiveSheet.Pictures.Insert(fPath & fName)
                .ShapeRange.LockAspectRatio = msoTrue
                Set px = .ShapeRange
                If .ShapeRange.Width > Rows(i).Columns(2).Width Then .ShapeRange.Width = Columns(2).Width
                    With Cells(i, 2)
                        px.Top = .Top
                        px.Left = .Left
                        .RowHeight = px.Height
                    End With
            End With
        End If
        fName = Dir
    Loop
    i = i + 1
Next r
Application.ScreenUpdating = True
End Sub

' 注意:你需要文件扩展名,例如',jpg',或者你使用的任何东西,所以你可以匹配它。

无论您在 A 列中输入什么图片名称,都将被导入到 B 列中的相邻单元格中

【讨论】:

    【解决方案3】:

    .Pictures.Insert("c:\fixedfile.png") 要求一个修复文件名作为其参数。但是您可以使用 FileCopy "desiredfile.png", "fixedfile.png" 来替换 fixedfile.png 的内容,从而满足您的需求。

    【讨论】:

      猜你喜欢
      • 2013-02-22
      • 2010-12-26
      • 2020-02-21
      • 1970-01-01
      • 2015-10-04
      • 2014-08-26
      • 2014-10-17
      • 2013-11-30
      • 1970-01-01
      相关资源
      最近更新 更多