VBAで関数を作成するのは初めてです。次のコードは、ここにあるスクリプトを変更したものです。このコードは、URL (またはファイル システム) から 2 つの画像を Excel スプレッドシートの 2 つのユーザー定義範囲に挿入します。ターゲット シートに、同じブックのソース シートの 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