
皆様おはこんばんちわ。
セル(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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのListBoxで複数選択して...
-
データが入力されている隣のセ...
-
Excel 行の連続データを列に参...
-
エクセルの画面で十字マークが...
-
Excel2010の指マークと白十字マ...
-
エクセル:マクロ「Application...
-
エクセルで、指定の値よりも大...
-
エクセル逆三角マークで選択項...
-
エクセルの罫線について
-
エクセルで表示形式の時刻の「0...
-
Excelに入力した個々の日付の数...
-
日付が未入力の際はゼロか、空...
-
エクセルのセル内に全角数字を...
-
IF関数で空欄("")の時、Null...
-
EXCELのcountif関数での大文字...
-
Excelの「0」だけ非表示、小数...
-
エクセルでの計算式で求められ...
-
エクセルで文字の入力がセルの...
-
if関数の複数条件について
-
枠に収まらない文字を非表示に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA(実行時エラー438...
-
EXCELマクロ 保護されているシ...
-
VBAのListBoxで複数選択して...
-
データが入力されている隣のセ...
-
VBAで、貼り付け禁止命令を実現...
-
メッセージを1度だけ表示したい。
-
エクセルテキストボックスの文...
-
ダブルクリックすると現在の時...
-
VBA セルに合わせて移動するが...
-
Swing 編集不可でも選択可能なJ...
-
Jtableの特定のセルの背景色や...
-
ハイパーリンクされているファ...
-
セル色を5秒間隔で変える
-
Excel VBA ダブルクリックで入...
-
VBAで丸をつけたいです。
-
セルに数値が入力されたら別の...
-
Windowsで動くVBAがmacOSで動か...
-
FileSearch2007に変わる構文に...
-
GrapeCityのSpreadの複数セルの...
-
現在 target.value = format(ta...
おすすめ情報