[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『「エクセル2010 VBA 画像挿入 」[しん] について』(しょう。)
投稿
[[20150419120616]] 『エクセル2010 VBA 画像挿入 』(しん)
について...
上記の掲示板を見て、画像挿入のVBAを作成致しました。
ありがとうございました。
今作成しているのが、
1つのエクセルに対し、ワークシートが5つほどあり、
各シート毎に式を入力しています。
1シート目だけは画像を挿入してもエラーが出ないのですが、
2シート目からは画像を挿入しようとすると、
「実行時エラー'1004':
アプリケーション定義またはオブジェクト定義のエラーです」と表示され、
VBA上の「myAD1 = mySp.TopLeftCell.MergeArea.Address」が黄色く塗りつぶされています。
でも、そのエラーは出たり出なかったりしています。
ネットやこちらでも検索してみましたが、
原因が不明の為、投稿させていただきました。
<--記載している式-->
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) Dim myF As Variant Dim mySp As Object Dim myAD1 As String Dim myAD2 As String Dim myHH As Double Dim myWW As Double Dim myHH2 As Double Dim myWW2 As Double
If Intersect(Range("B4,V4,B22,V22,B40,V40,B62,V62,B81,V81.B99,V99,B117,V117,B135,V135,B158,V158,B176,V176,B194,V194,B212,V212"), Target) Is Nothing Then Exit Sub
Cancel = True '===============画像選択 myF = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If myF = False Then MsgBox "画像を選択してください(終了)" Exit Sub End If '===============画像の掃除 For Each mySp In ActiveSheet.Shapes myAD1 = mySp.TopLeftCell.MergeArea.Address myAD2 = Target.Address If myAD1 = myAD2 Then mySp.Delete Next '===============画像の貼り付け Set mySp = ActiveSheet.Shapes.AddPicture(Filename:=myF, LinkToFile:=False, _ SaveWithDocument:=True, Left:=Target.Left, Top:=Target.Top, _ Width:=0, Height:=0) '★ とりあえず 縦横0で。 mySp.ScaleHeight 1, msoTrue '★元のサイズに戻す mySp.ScaleWidth 1, msoTrue '★元のサイズに戻す '===============タテヨコの縮尺を保持 If mySp.Width > Target.Width Then mySp.Width = Target.Width If mySp.Height > Target.Height Then mySp.Height = Target.Height '===============中央へ調整 myHH2 = (Target.Height / 2) - (mySp.Height / 2) myWW2 = (Target.Width / 2) - (mySp.Width / 2) mySp.Top = Target.Top + myHH2 mySp.Left = Target.Left + myWW2 Set mySp = Nothing End Sub
<--式ここまで-->
ご存知の方がいらっしゃいましたら、
教えていただけますと幸いです。
宜しくお願い致します。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
エラーも出る時と出ない時があったのですが、
今朝、エラーが出た時に「DoEvents」を下記の場所に入れてみました。
DoEvents
myAD1 = mySp.TopLeftCell.MergeArea.Address
DoEvents myAD2 = Target.Address
今の所、エラーはなくなっています!
ただ、画像削除した場合だけに「DoEvents」を入れるにはどのように記述したらいいか教えていただいてもよろしいでしょうか。
(しょう。) 2017/09/08(金) 10:35
If myAD1 = myAD2 Then mySp.Delete
これを、以下のようにするだけです。 元々、End If を省略して1行で書いてしまうことは、ネスティングが判りにくくなるので、お薦めできない書き方です。必ず End If まで書く事を心がけると良いでしょう。
If myAD1 = myAD2 Then mySp.Delete DoEvents End If (???) 2017/09/08(金) 10:57
式の書き方につきましてもアドバイスありがとうございます。
今後癖付けをしておきます。。。
その前に式の書き方を勉強しなくてはですね!
あと、式を上記のように記入してみましたが、
今度は違うセルで発生しました。
でも、保存してまた開いて画像を選択するとうまくいきました。
ちょっと原因不明すぎますが、
エラーが出る回数もほぼゼロなので、これで進めます。
お忙しい中教えていただきありがとうございました☆
(しょう。) 2017/09/08(金) 13:09
あの後も数回出る時と出ない時があったので、
前後だったりと入れてみると、エラーもなくなりました。
ありがとうございました☆
(しょう。) 2017/09/15(金) 13:57
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.