Image Excel VBA自定义函数从URL错误插入图像

Image Excel VBA自定义函数从URL错误插入图像,image,excel,function,url,vba,Image,Excel,Function,Url,Vba,我不熟悉在VBA中创建函数。以下代码是对找到的脚本的修改。代码将URL(或文件系统)中的两个图像插入Excel电子表格中的两个用户定义范围。在目标工作表中,我得到了一个引用URL的公式,该URL包含同一工作簿中源工作表中的单元格。代码在它自己的工作表上应该可以正常工作,但是,当我在源工作表上工作时,它也会在保存文档或复制/粘贴时将图像插入源工作表。在告诉Excel仅粘贴到目标工作表时,如何保持函数的通用性?如何防止每次保存或复制/粘贴时重新计算代码?谢谢禅 Public Function New

我不熟悉在VBA中创建函数。以下代码是对找到的脚本的修改。代码将URL(或文件系统)中的两个图像插入Excel电子表格中的两个用户定义范围。在目标工作表中,我得到了一个引用URL的公式,该URL包含同一工作簿中源工作表中的单元格。代码在它自己的工作表上应该可以正常工作,但是,当我在源工作表上工作时,它也会在保存文档或复制/粘贴时将图像插入源工作表。在告诉Excel仅粘贴到目标工作表时,如何保持函数的通用性?如何防止每次保存或复制/粘贴时重新计算代码?谢谢禅

Public Function NewPicsToRanges(URL1 As String, URL2 As String, Optional TargetCells1 As Range, Optional TargetCells2 As Range)
' inserts a picture and resizes it to fit the TargetCells range

ActiveSheet.Shapes.SelectAll
Selection.Delete

Dim p1 As Object, t1 As Double, l1 As Double, w1 As Double, h1 As Double
    If TypeName(ActiveSheet) <> "Worksheet" Then Exit Function
    'If Dir(URL1) = "" Then Exit Function
    ' import picture
    Set p1 = ActiveSheet.Pictures.Insert(URL1)
    ' determine positions
    With TargetCells1
        t1 = .Top
        l1 = .Left
        w1 = .Offset(0, .Columns.Count).Left - .Left
        h1 = .Offset(.Rows.Count, 0).Top - .Top
    End With
    ' position picture
    With p1
        .Top = t1
        .Left = l1
        .Width = w1
        .Height = h1
    End With
    Set p1 = Nothing

Dim p2 As Object, t2 As Double, l2 As Double, w2 As Double, h2 As Double
    If TypeName(ActiveSheet) <> "Worksheet" Then Exit Function
    'If Dir(URL2) = "" Then Exit Function
    ' import picture
    Set p2 = ActiveSheet.Pictures.Insert(URL2)
    ' determine positions
    With TargetCells2
        t2 = .Top
        l2 = .Left
        w2 = .Offset(0, .Columns.Count).Left - .Left
        h2 = .Offset(.Rows.Count, 0).Top - .Top
    End With
    ' position picture
    With p2
        .Top = t2
        .Left = l2
        .Width = w2
        .Height = h2
    End With
    Set p2 = Nothing

End Function
公共函数NewPicsToRanges(URL1作为字符串,URL2作为字符串,可选TargetCells1作为范围,可选TargetCells2作为范围)
'插入图片并调整其大小以适合TargetCells范围
ActiveSheet.Shapes.SelectAll
选择。删除
尺寸p1为对象,t1为双精度,l1为双精度,w1为双精度,h1为双精度
如果TypeName(ActiveSheet)“工作表”,则退出函数
'如果Dir(URL1)='',则退出函数
“进口图片
设置p1=ActiveSheet.Pictures.Insert(URL1)
"定位",
与目标细胞1
t1=.Top
l1=.左
w1=.Offset(0,.Columns.Count).Left-.Left
h1=.Offset(.Rows.Count,0).Top-.Top
以
"位置图"
与p1
.Top=t1
.左=l1
.宽度=w1
.高度=h1
以
设置p1=无
尺寸p2为对象,t2为双精度,l2为双精度,w2为双精度,h2为双精度
如果TypeName(ActiveSheet)“工作表”,则退出函数
'如果Dir(URL2)='',则退出函数
“进口图片
设置p2=ActiveSheet.Pictures.Insert(URL2)
"定位",
与目标细胞2
t2=.Top
l2=.左
w2=.Offset(0,.Columns.Count).Left-.Left
h2=.Offset(.Rows.Count,0).Top-.Top
以
"位置图"
与p2
.Top=t2
.Left=l2
.宽度=w2
.高度=h2
以
设置p2=无
端函数

每当您重新计算工作表时,该函数都会运行,这在您处理工作表时会经常发生。当您在源工作表上工作时,它会将图像放在源工作表上,因为您正在将
p1
p2
对象设置为
ActiveSheet

请尝试以下方法:

Set p1 = ThisWorkbook.Worksheets(TargetSheet).Pictures.Insert(URL1)

您可能还希望将“计算”设置为“手动”,以便不会在每次更改单元格值时删除和重新插入图像:

Application.Calculation = xlCalculationManual

太好了,我的荣幸!如果这已经回答了您的问题,您应该通过单击答案文本左侧的复选标记来接受此答案。这将有助于你在将来获得更多答案,因为本网站的经验丰富的用户有时会确保你在回答之前接受了之前问题的正确答案。
Application.Calculation = xlCalculationManual