[[20190108103447]] 『「あるかないか」の分岐がうまくいかない』(ニンジン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『「あるかないか」の分岐がうまくいかない』(ニンジン)

[入力内容シート]に複数の画像(名前は「合体1」「合体2」…)があります。
画像は最大23枚ですが、抜けている場合もあります。
(例えば「合体5」と「合体7」がなくて合計21枚など)
表示されているすべての画像を[一覧シート]にコピペして5列ずつに配列したいです。

下記マクロで配列自体はできたのですが、
「画像があるかないか」の分岐が
上手くいっていないようなのでご教示頂けると助かります。

With Worksheets("入力内容")

 For n = 1 To 23  
  図名 = "合体" & n
   On Error Resume Next
    If Not .Shapes(図名) Is Nothing Then
     .Shapes(図名).Copy
       With Worksheets("一覧")
        .Range("F1").PasteSpecial Paste:=xlPasteAll
        図番 = .Shapes.Count
        行 = (図番 + 4) \ 5
        列 = 図番 Mod 5
          If 列 = 0 Then
           .Shapes(図番).Top = .Cells(行, 5).Top
           .Shapes(図番).Left = .Cells(行, 5).Left
          Else
           .Shapes(図番).Top = .Cells(行, 列).Top
           .Shapes(図番).Left = .Cells(行, 列).Left
          End If
       End With
    Else
      GoTo p01
    End If

p01:

  Excel.Application.CutCopyMode = False
 Next n
End with

具体的には、画像が「合体10」「合体11」の2枚しかない場合、
「合体1〜9」は期待通り無視され、
「合体10」「合体11」は期待通りの位置にコピペされ、
その続きに「合体11」が12枚(=23-11)貼り付けされます。

「合体12〜23」の画像がないにも関わらず、
あると判断され、最後にコピーした画像を
ループの度に貼りつけているということかと思いますが、
どこを直せば良いのでしょうか?

< 使用 Excel:unknown、使用 OS:unknown >


 一目ですけど・・

 >With Worksheets("入力内容") 
 > For n = 1 To 23  
 >  図名 = "合体" & n
 >   On Error Resume Next
 >    If Not .Shapes(図名) Is Nothing Then
 >     .Shapes(図名).Copy

 ↓でどうかなぁと思います(テストはしていませんが・・)」

 Dim Shp as Object
 With Worksheets("入力内容") 
  For n = 1 To 23  
   図名 = "合体" & n
    Set Shp = Nothing
    On Error Resume Next
    Set Shp =  .Shapes(図名) 
    On Error GoTo 0

     If Not Shp Is Nothing Then
      Shp.Copy

( 半平太) 2019/01/08(火) 11:11


半平太さん、素早い返答ありがとうございます。
おかげさまで、解決しました!

Setで収納する必要があったのですね。
自分で一から書くと、焦ってこういう細かいところを
ないがしろにしてしまうことが多々あるので、今後気を付けます。
どうも、ありがとうございました!

(ニンジン) 2019/01/08(火) 13:31


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.