- ベストアンサー
オートシェイプの表示の切り替え
はじめまして。よろしくお願い致します。 エクセル2003で、楕円などのオートシェイプをクリックすると、表示できたり非表示にしたり、切り替えれるマクロかVBAがあれば教えてください。お願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>やってみたのですが上手くいきません どううまくいかないのかわからないのですが、オブジェクトの選択状態(白抜き矢印状態)ではイベントは発生しません。 マウスカーソルが白抜き十字架状態でイベントが発生します。 下記はその対応もしています。 'シェープのクリックイベントを設定(どこでもいいが1度実行する) Private Sub Worksheet_Activate() Dim sh As Shape For Each sh In ActiveSheet.Shapes sh.OnAction = ActiveSheet.Name & ".shape_click" 'シート上のシェープがクリックされたら、このシートモジュールのshape_clickを呼ぶ Next 'ついでにやっておいたほうがいいかも ActiveCell.Select '既に選択状態のオブジェクトがあったら選択解除するためにセルを選択 '[オブジェクトの選択]状態 With Application.CommandBars.FindControl(ID:=182) If .State = msoButtonDown Then .Execute '[オブジェクトの選択]状態なら解除 End If '.Enabled = False '[オブジェクトの選択]を変更できないようにする(必要なら入れる。これを実行した場合は必ずどこかで下記のEnabled=Trueを実行する) End With End Sub '[オブジェクトの選択]のEnabledを変更している場合は必要 Private Sub Worksheet_Deactivate() Application.CommandBars.FindControl(ID:=182).Enabled = True '[オブジェクトの選択]を変更できるようにする(変更できなくしている場合は入れる) End Sub 'シェープのクリックイベント Private Sub shape_click() Shapes(Application.Caller).Fill.Visible = Not Shapes(Application.Caller).Fill.Visible 'シェープの塗りつぶしの書式設定でvisibleを逆にする Shapes(Application.Caller).Line.Visible = Not Shapes(Application.Caller).Line.Visible 'シェープの境界線の書式設定でvisibleを逆にする End Sub また、Shapeを消すのは塗りつぶしと境界の表示の反転で行っているので、どちらかだけのものがある場合は下記で。 Private Sub shape_click() Select Case Application.Caller Case "楕円 1", "楕円 2" '塗りつぶしも境界線もある場合 Shapes(Application.Caller).Fill.Visible = Not Shapes(Application.Caller).Fill.Visible Shapes(Application.Caller).Line.Visible = Not Shapes(Application.Caller).Line.Visible Case "楕円 3", "楕円 4" '塗りつぶしだけの場合 Shapes(Application.Caller).Fill.Visible = Not Shapes(Application.Caller).Fill.Visible Case "楕円 5", "楕円 6" '境界線だけの場合 Shapes(Application.Caller).Line.Visible = Not Shapes(Application.Caller).Line.Visible End Select End Sub
その他の回答 (4)
- wisemac21
- ベストアンサー率39% (171/429)
オブジェクトの表示/非表示の切り替えはショートカットキーで Ctrl + 6 です こちらを使われた方がよいのではないでしょうか 試してみてください。
お礼
そのような手もあるんですね。 ありがとうございます。
- hotosys
- ベストアンサー率67% (97/143)
オートシェープのあるシートのVBAに下記をコピー。 一度違うシートを選んで元に戻ると、Worksheet_Activateでシェープのクリックイベントを設定する。 細かい状況が分からないので、全てのシェープの線と塗りつぶしを逆状態にするプログラム。 シェープが見えなくなってもマウスカーソルがその上に移動すると形が変わるはず。 Private Sub Worksheet_Activate() Dim sh As Shape For Each sh In ActiveSheet.Shapes sh.OnAction = ActiveSheet.Name & ".shape_click" Next End Sub Private Sub shape_click() Shapes(Application.Caller).Fill.Visible = Not Shapes(Application.Caller).Fill.Visible Shapes(Application.Caller).Line.Visible = Not Shapes(Application.Caller).Line.Visible End Sub
お礼
返事が遅れてすみません。 オートシェイプをクリックしたら表示され、またクリックしたらパソコンの画面上では、消えたように見え、マウスをそこにもっていくとマウスの形が変わるのが理想です。 hotosysさんの案が近いようなのですが、上記のやり方をもう少し分かりやすく説明していただけないでしょうか? やってみたのですが上手くいきません…すいません。お願い致します。
- Masa2072
- ベストアンサー率51% (94/182)
オートシェイプをクリックすることで非表示にすることは可能ですが、非表示にしたオートシェイプをクリックすることができませんので、表示させるには別の方法を考える必要があります。 とりあえずクリックしたら非表示にする方法ですが 1、画面上にオートシェイプを作成します。 2、オートシェイプに名前をつけます。 オートシェイプを選択した状態で画面左上の「名前ボックス」(セルのアドレスが表示されている箇所)につけたい名前を入力しEnterキーを叩きます。 ※仮にDAENとしておきます。 3、オートシェイプを選択した状態で右クリックし、ショートカットメニューから「マクロの登録」 4、「新規作成ボタン」をクリックします。 5、以下のマクロ(VBA)を記述 Activesheet.Shapes("DAEN").Visible = False 6、Visual Basic Editorを閉じます。 表示させる際は、標準モジュールに Sheets("Sheet1").Shapes("DAEN").Visible = True というマクロを作成し、メニューから実行するかボタンなどにマクロを登録します。 ※オートシェイプがSheet1にある場合です。
お礼
参考にさしていただきます。ありがとうございます。
- imogasi
- ベストアンサー率27% (4737/17069)
図形が消えてしまうと画面上では捉えられないのではと思うので 別にコマンドボタンを1つシートに貼り付け Private Sub CommandButton1_Click() If ActiveSheet.Shapes("Oval 2").Visible = True Then ActiveSheet.Shapes("Oval 1").Visible = False CommandButton1.Caption = "表示" Else ActiveSheet.Shapes("Oval 1").Visible = True CommandButton1.Caption = "非表示" End If End Sub これでコマンドボタンをクリックすると消えたり現れたりする。 コンなのはどうだろう。 場合により("Oval 1").の1の部分は変わるから注意。
お礼
ありがとうざいます。 試してみます。
お礼
丁寧な説明ありがとうございます。 無事にできました。本当に助かりました。 ありがとうございます。