我有一个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
提前谢谢!
答案 0 :(得分:1)
您只需检查Target.Address
(Target
是否已修改范围)。
我还要计算Target
以确保它只有一个Range
:
If (Target.Count > 1) Or (Split(Target.Address,"$")(1) <> "A") Then Exit Sub
说明:上面的测试应该在动作宏Worksheet_Change
的开头完成并执行以下操作:
Target.Count
返回Target
中的单元格数(即已更改的单元格数)。由于我猜您希望用户一次只键入一个图像名称,因此检查Target.Count
,如果它大于1 Exit Sub
Target.Address
返回这样的地址(例如):$A$15
。您通过分隔符Split
$
使用此字符串,因此函数Split(Target.Address,"$")
将返回如下数组:("","A","15")
。你得到它的第二个元素(1)
,你可以用值“A”来测试它。如果它不是"A"
(即,如果用户修改了不在列A
中的单元格),那么您Exit Sub
并且您没有附加任何图像。