2017-05-08 72 views
0

我想根据单元格值将图片插入到excel中。单元格值位于图像路径中。我是新人,我的部分基础是录制宏观,一部分基于观点。这就是我想...VBA动态图片

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

有什么问题吗?什么是代码没有做到你想要的?如果您希望代码将图片放置在工作簿的不同区域,请告诉我们您要如何插入它们......即 - 每8行或某物。 –

+4

摆脱所有的'.Select'的东西,这是宏记录器毒药通过模仿录制的每一个单一的用户动作教你错误的东西。例如在'Range'(“B7:G9”)''中声明'cell'变量(在模块的顶部指定'Option Explicit') - 然后是的,问一个明确的问题,可以回答。 –

+1

@ Mat'sMug“宏观记录器毒药” - 我喜欢那个词组,虽然我可能更喜欢将“crud”改为“poison”(保留“poison”用于'On Error Resume Next'的全部使用)。 –

回答

0

“无法获得图片类的插入财产”得到一个错误是一般性的错误信息,您不妨只是翻译为“您尝试做的事情出了问题,我无法给您提供更多信息”。很可能,图像文件的路径尚未正确构建。

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

+0

非常感谢@absinthe我做了#1更改,然后在FYI中提出了更改,并且它完美地工作! – ca2ky

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 

“注意:您需要的文件扩展名,例如”,JPG”,或任何你正在使用,所以你可以匹配上。

你把A列无论图片名称,将被导入到相邻的单元格,列B