VBA动态图片

时间:2017-05-08 19:40:32

标签: excel vba excel-vba

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

我一直在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

3 个答案:

答案 0 :(得分:0)

"无法获取Pictures类的插入属性"是一个通用的错误消息,您可以将其翻译为"您尝试做的事情出了问题,我无法向您提供更多信息"。虽然图像文件的路径未正确构建,但很可能。

1)从insert语句中删除.Select。在语法上它没有任何意义。只需使用ActiveSheet.Pictures.Insert(imagePath)

即可

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

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

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

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

答案 1 :(得分:0)

考虑这个选项。

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

&#39;注意:您需要文件扩展名,例如&#39;,jpg&#39;或您正在使用的任何内容,因此您可以匹配。

无论您在A栏中放置什么图片名称,都会导入B列中的相邻单元格

答案 2 :(得分:0)

.Pictures.Insert(“ c:\ fixedfile.png”)询问修复文件名称作为其参数。但是,您可以使用FileCopy“ desiredfile.png”,“ fixedfile.png”替换fixfile.png的内容,从而满足您的需求。