1233454187 エクセルVBAでお願いします。添付画像のように、1シートごとに一人分の作業記録を作っています。黄色くした部分にはテキストボックスが入っています。1ページは27行。印刷範囲はA列からF列。記録内容が満タンになったら、左下の緑のプラス画像を押して(マクロになっているので)、押すたびに同じ形式のページが増えるようにしています。添付画像の右側の例は2回押して、3ページ分になったことを表しています。当然、テキストボックスが3つ分。緑のプラス画像3つとバツマーク画像3つがあります。


そこで、お願いというのは赤いバツマーク画像にいれるマクロです。赤いバツマーク画像があるページのみを削除したいのです。上のページから消す場合は簡単です。しかし、2ページ目を消してから3ページ目を消す場合がありまして、そうすると対象範囲が途中で変わってしまいます。さっきまでRange("55:81")を対象としていたのにRange("28:54")と、対象が変わってしまいます。

要するに、任意ページを消すマクロができないかということです。該当範囲のテキストボックスと緑のプラス画像と赤いバツマーク画像も消します。よろしくお願いします。バージョンは2002です。

回答の条件
  • 1人2回まで
  • 登録:2009/02/01 11:09:48
  • 終了:2009/02/01 12:57:32

ベストアンサー

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692009/02/01 12:22:32

ポイント100pt

画像にマクロが登録されているとして、呼び出しもとの画像の位置を取得できれば削除するシート範囲を決定できると思います。

その場合、application.callerで呼び出しもとのshapeが取得できます。

次のようなマクロを×ボタンに登録すれば可能です。

やっていることは、呼び出し元のshapeの行を取得して、その行を元にテキストボックスと画像と行を削除しています。


Sub Macro()
    Dim r As Long
    Dim shp As Shape
    
    r = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
    
    For Each shp In ActiveSheet.Shapes
        If shp.TopLeftCell.Row = r - 23 Or shp.TopLeftCell.Row = r Then
            shp.Delete
        End If
    Next
    ActiveSheet.Rows(r - 26 & ":" & r).Delete Shift:=xlUp
End Sub
id:anglar

なるほど。出来ています。呼び出しもとの画像の位置を取得すればできることはわかっていましたが、なるほどこうやるんですか。application.callerなんて、初めて知りました。ありがとうございました。

2009/02/01 12:56:46
  • id:SALINGER
    緑と×の画像を押すとマクロが実行されるというのは、画像にマクロの登録を使っているということでしょうか。
    緑でシートを増やした場合、緑と×の画像もコピーされて同じ登録したマクロが実行されるということでしょうか?
  • id:taknt
    Range指定だけでは、テキストボックスは削除されないと思うけど。

  • id:anglar
    SALINGERさんへ。シートを増やすと、緑も赤もコピーされていきますので、例のとおり、3ページになると、テキストボックスも緑も赤も3つずつになります。この辺は、自分のマクロで出来ています。
    TAKNTさんへ。range指定で処理しているのではなく、説明のためについ記述してしまいました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません