人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

1233454187
●拡大する

●質問者: anglar
●カテゴリ:コンピュータ
✍キーワード:28 エクセル テキスト バージョン プラス
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● SALINGER
●100ポイント ベストアンサー

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

その場合、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
◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ