皆様おはこんばんちわ。
セル(Ex.B2,B3,B4)をダブルクリックする度に、そのセル内にオートシェイプを描画/削除したいのです。
描画は下記(で良いのかですが)で出来たのですが、削除がどうしてもわかりません。
-------------------------------------------------------------------------
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("B2:B4")) Is Nothing Then Exit Sub
With ActiveCell
With ActiveSheet.Shapes.AddShape _
(msoShapeOval, .Left, .Top, .Width, .Height)
.Fill.Visible = msoFalse
.Line.Weight = 1.75
.Line.ForeColor.SchemeColor = 0
End With
End With
End Sub
-------------------------------------------------------------------------
既に図形があるセルをダブルクリックで削除するにはどの様な方法があるのでしょうか。
バージョンはExcel2007です。
皆様よろしくご教示ください。
No.2ベストアンサー
- 回答日時:
オートシェイプ描画時に自身を削除する(Wクリックでは無くクリックになってしまいますが)マクロを仕込む方法があります。
リンク先の#3ですが、コードが(おそらく実行時間も)短いのがメリットです。http://oshiete.goo.ne.jp/qa/5496600.html
1.ダブルクリックでセル内に楕円を描く(ご質問には合わせておらず、以前回答したままです、OnActionのところにご注目下さい。)
これはシートモジュールに記述
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Target
.Parent.Shapes.AddShape(msoShapeOval, .Left, .Top, .Width, .Height).Select
End With
With Selection
.ShapeRange.Fill.Visible = msoFalse
.OnAction = "eraseShape"
End With
End Sub
2.消すときはダブルクリックではなく、クリックになってしまいますが、こちらは標準モジュールに記述してください。(Module1など)
Sub eraseShape()
ActiveSheet.Shapes(Application.Caller).Delete
End Sub
こちらは少々やりとりが長いですが、一般的なシート内の全図形をスキャンして、セル位置が合致したら削除する方法を含んでいます。(我田引水)
http://oshiete.goo.ne.jp/qa/8241405.html
この回答への補足
mitarashiさま
いつも斬新で美しいコーディング誠に有難う御座います♪
同様の質問を検索はしていたのですが、見つける事が出来ず質問してしまいました。
それなのに、丁寧に解説までして頂いて^^
セルに楕円(Aとします)がある状態で、他のセルをダブルクリック(Bとします)すると
楕円Aのサイズ?位置?が動いてしまいました。
楕円Bをクリックで消去すると楕円Aは元に戻ります。
これは、Excel2007だからなのでしょうか?
mitarashiさまの方でもご確認出来ますでしょうか?
mitarashiさま
お礼が遅れてしまいました。
希望以上のご提案ありがとうございました♪
オートシェイプがぴょこぴょこ動く件についてご報告です。
下記の通り、私のPCがおかしいのかも知れません...
・画面の表示倍率を大きく(130%~180%)して動作確認をしていました。
→100%に戻してから拡大すると正しい位置に楕円が表示されている。(200%だとピコピコしない)
→印刷プレビューすると正しい位置にあり、シートに戻ったら正しい位置に表示されている。
(楕円が二重に表示されていても、操作後は1個になっている)
お騒がせ致しました<(_ _)>
No.3
- 回答日時:
#2です。
過分なお言葉をいただき恐縮です。既存の楕円がちょこっと動く現象は確認できませんでしたが(当方xl2010です)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
の中に、
Cancel = True
を加える方が紛れが少ないと思います。
この場合、Wクリックによりセルが編集状態になるのをCancelする働きをします。
ご参考まで。
<参考>「VBA Cancel=true」で検索すると、多数見つかります
http://www.excel.studio-kazu.jp/kw/2009081222365 …
イベントのカスタマイズのコードは初めてみました...
http://www.ken3.org/vba/backno/vba060.html
フォームを閉じるボタンのキャンセル等に使いますね
mitarashiさま
こんばんは。
質問のコードには、Cancel=Trueを消してしまっていたので色々と考察させていまいすみませんでした。
何をキャンセルするのかは明確には解っていませんでした。。。
以前、試しにfalseにしセルが編集出来た。。位で終わっていました。
>イベントのカスタマイズのコードは初めてみました...
おっしゃっている意味がわかりません(T_T)
昨夜も調べていましたがクラスモジュールでつまづいていて...
初めて見られたって事は、VBはかなーり深いものなのですね。
フォームを作った時、×の事は気にしていなかったり。。。
いつまでも質問者に徹します。
No.1
- 回答日時:
以下のページを参考にしてみてください。
インストラクターのネタ帳
選択したセル範囲に含まれる図形を削除するマクロ
http://www.relief.jp/itnote/archives/018407.php
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Excel(エクセル) エクセルのイベントプロシージャーでF列の最終行のセルの入力をトリガーにしたいのですが 1 2022/10/14 09:36
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
エクセルマクロで指定範囲内の図形を削除
Excel(エクセル)
-
指定範囲内で図形等を削除する方法は?
その他(Microsoft Office)
-
セルをクリック⇒そのセルに入力された文字を○で囲む
Excel(エクセル)
-
-
4
画像を削除したい(VBA)
Word(ワード)
-
5
マクロでオートシェイプを表示したいのですが(泣)
Excel(エクセル)
-
6
【EXCEL】【VBA】空欄は飛ばして処理する方法を教えて下さい。
Excel(エクセル)
-
7
エクセル ダブルクリック入力の範囲が複数の場合
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELマクロ 保護されているシ...
-
データが入力されている隣のセ...
-
エクセルテキストボックスの文...
-
ダブルクリックすると現在の時...
-
VBAで丸をつけたいです。
-
エクセルVBA(実行時エラー438...
-
VBAで、貼り付け禁止命令を実現...
-
エクセルのVBAでダブルクリック...
-
メッセージを1度だけ表示したい。
-
Excel VBA セルを指定個数ラン...
-
EXCEL VBA Rangeの指定方法につ...
-
Excel VBA ダブルクリックで入...
-
マクロを使って画像を貼り付け
-
JTableでのCELLの複数選択
-
Excelのセル内にある図形を削除...
-
VBAのListBoxで複数選択して...
-
ハイパーリンクされているファ...
-
VBAについて教えてください。 E...
-
エクセルVBA セル選択後にカレ...
-
VBA セルに合わせて移動するが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データが入力されている隣のセ...
-
EXCELマクロ 保護されているシ...
-
エクセルテキストボックスの文...
-
VBAで、貼り付け禁止命令を実現...
-
ハイパーリンクされているファ...
-
VBAで丸をつけたいです。
-
メッセージを1度だけ表示したい。
-
エクセルVBA(実行時エラー438...
-
ダブルクリックすると現在の時...
-
VBA セルに合わせて移動するが...
-
(VBA)アクティブセルを起点に...
-
Jtableの特定のセルの背景色や...
-
Windowsで動くVBAがmacOSで動か...
-
エクセルVBA セル選択後にカレ...
-
Excelのセル内にある図形を削除...
-
Excel VBA ダブルクリックで入...
-
セル色を5秒間隔で変える
-
StringGridでの文字入力制限
-
【VBA】参照値を1ずつ増やして...
-
マクロでのカーソル移動
おすすめ情報