dポイントプレゼントキャンペーン実施中!

はじめまして。よろしくお願い致します。
エクセル2003で、楕円などのオートシェイプをクリックすると、表示できたり非表示にしたり、切り替えれるマクロかVBAがあれば教えてください。お願い致します。

A 回答 (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
    • good
    • 0
この回答へのお礼

丁寧な説明ありがとうございます。
無事にできました。本当に助かりました。

ありがとうございます。

お礼日時:2008/07/09 09:24

オブジェクトの表示/非表示の切り替えはショートカットキーで


Ctrl + 6 です
こちらを使われた方がよいのではないでしょうか
試してみてください。
    • good
    • 0
この回答へのお礼

そのような手もあるんですね。 ありがとうございます。

お礼日時:2008/07/09 09:27

オートシェープのあるシートの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
    • good
    • 0
この回答へのお礼

返事が遅れてすみません。
オートシェイプをクリックしたら表示され、またクリックしたらパソコンの画面上では、消えたように見え、マウスをそこにもっていくとマウスの形が変わるのが理想です。

hotosysさんの案が近いようなのですが、上記のやり方をもう少し分かりやすく説明していただけないでしょうか? やってみたのですが上手くいきません…すいません。お願い致します。

お礼日時:2008/07/08 16:15

オートシェイプをクリックすることで非表示にすることは可能ですが、非表示にしたオートシェイプをクリックすることができませんので、表示させるには別の方法を考える必要があります。



とりあえずクリックしたら非表示にする方法ですが
1、画面上にオートシェイプを作成します。
2、オートシェイプに名前をつけます。
 オートシェイプを選択した状態で画面左上の「名前ボックス」(セルのアドレスが表示されている箇所)につけたい名前を入力しEnterキーを叩きます。
 ※仮にDAENとしておきます。
3、オートシェイプを選択した状態で右クリックし、ショートカットメニューから「マクロの登録」
4、「新規作成ボタン」をクリックします。
5、以下のマクロ(VBA)を記述
Activesheet.Shapes("DAEN").Visible = False
6、Visual Basic Editorを閉じます。

表示させる際は、標準モジュールに
Sheets("Sheet1").Shapes("DAEN").Visible = True
というマクロを作成し、メニューから実行するかボタンなどにマクロを登録します。
※オートシェイプがSheet1にある場合です。
    • good
    • 0
この回答へのお礼

参考にさしていただきます。ありがとうございます。

お礼日時:2008/07/09 09:27

図形が消えてしまうと画面上では捉えられないのではと思うので


別にコマンドボタンを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の部分は変わるから注意。
    • good
    • 0
この回答へのお礼

ありがとうざいます。 試してみます。

お礼日時:2008/07/09 09:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!