在Excel列VBA中插入图像

时间:2017-07-20 21:01:25

标签: excel vba excel-vba

我有一个VBA代码,无论我在哪里输入图像名称,都会在右侧单元格中的Excel工作表中插入图像。但是我希望它只适用于A:B范围: 在列A的单元格中键入名称,它将在下一个单元格中插入图像 - 列B. 这是我要修改的代码:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim c As Range
    Dim myPath As String

    myPath = "P:\"

    Application.ScreenUpdating = False

    For Each c In Target.Cells
        If Not Dir(myPath & "*" & c.Text & "*") = "" Then
            InsertPicture myPath & Dir(myPath & "*" & c.Text & "*"), c.offset(0, 1)
        End If
    Next c

    Application.ScreenUpdating = True
End Sub
'

Sub InsertPicture(thePath As String, theRange As Range)

    With ThisWorkbook.ActiveSheet.Pictures.Insert(thePath)

        With .ShapeRange
            .LockAspectRatio = msoTrue
            .Width = theRange.Width
            .Height = theRange.Height
        End With

        .Left = theRange.Left
        .Top = theRange.Top
        .Placement = 1
        .PrintObject = True

    End With
End Sub

提前谢谢!

1 个答案:

答案 0 :(得分:1)

您只需检查Target.AddressTarget是否已修改范围)。 我还要计算Target以确保它只有一个Range

If (Target.Count > 1) Or (Split(Target.Address,"$")(1) <> "A") Then Exit Sub 

说明:上面的测试应该在动作宏Worksheet_Change的开头完成并执行以下操作:

  1. Target.Count返回Target中的单元格数(即已更改的单元格数)。由于我猜您希望用户一次只键入一个图像名称,因此检查Target.Count,如果它大于1 Exit Sub
  2. 第二次检查是在专栏信上。变量Target.Address返回这样的地址(例如):$A$15。您通过分隔符Split $使用此字符串,因此函数Split(Target.Address,"$")将返回如下数组:("","A","15")。你得到它的第二个元素(1),你可以用值“A”来测试它。如果它不是"A"(即,如果用户修改了不在列A中的单元格),那么您Exit Sub并且您没有附加任何图像。