Excel VBA:如何检查单元格内的图片名称?

时间:2015-08-19 10:02:59

标签: excel vba excel-vba

我在宏中编写程序,检查单元格中图片的名称,然后根据图片名称在下一列上放置一个值。

我的程序仅检查活动表中是否存在图片的名称。

我的目标是检查图片的名称是否在此单元格上,然后根据图片的名称在下一列上添加值。非常感谢。

Sub CheckImageName()
Dim iRowCountShapes As Integer
Dim sFindShape As String

iRowCountShapes = 2


While Sheets("Data").Cells(iRowCountShapes, 1) <> ""

    If Sheets("Data").Shapes("Rock").Name = "Rock" Then

        Sheets("Data").Cells(iRowCountShapes, 3) = "Rock"

    ElseIf Sheets("Data").Shapes("Roll").Name = "Roll" Then

        Sheets("Data").Cells(iRowCountShapes, 3) = "Roll"

    Else

        Sheets("Data").Cells(iRowCountShapes, 3) = "Neither"

    End If

    iRowCountShapes = iRowCountShapes + 1

Wend

End Sub

3 个答案:

答案 0 :(得分:3)

图片不在单元格中重新存在,它们位于工作表上方的绘图层中。根据图片左上角的单元格,循环显示图片并将名称放在相关列中更容易:

Sub CheckImageName()
    Dim pic                   As Excel.Picture

    For Each pic In ActiveSheet.Pictures

        pic.TopLeftCell.Offset(, 2).Value2 = pic.Name
    Next pic
End Sub

答案 1 :(得分:2)

Excel中的图像可以作为形状使用。如果它们在插入时被正确命名(使用真实文件名),那么您可以像这样迭代它们

Private Sub CommandButton1_Click()
Dim doc As Worksheet
Dim spe As Shape

Set doc = Worksheets(1)

For i = 1 To doc.Shapes.Count - 1
    Set spe = doc.Shapes(i)

    'for named images
    Debug.Print doc.Shapes(i).Name

    spe.Select

    'for linked images
    Debug.Print GetSourceInfo(spe)
Next

End Sub

Function GetSourceInfo(oShp As Shape) As String
    On Error GoTo Error_GetSourceInfo
    GetSourceInfo = oShp.LinkFormat.SourceFullName
    Exit Function
Error_GetSourceInfo:
   GetSourceInfo = ""
End Function

在我的案例中显示了excel生成的图像名:

  • 图片1
  • 图片2
  • 图片3

答案 2 :(得分:1)

首先,我必须澄清一点,在我的世界中,我会做任何使事情有效的方法,所以这是获取对象名称的低级方法。

录制宏,将对象复制并粘贴到任何地方,停止录制。删除粘贴的对象。查看刚刚创建的宏的代码,在vba中,您将看到对象的名称。删除宏。