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