• 締切済み

Shapes の使い方について

DreamyCatの回答

  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.3

すでにいくつかの記法が示されていますが Vista・Excel2007sp1で調べてみたところ下記のどれも問題なく 動作しました。  たくさんのシートにたくさんのcommandbuttonがあるということなのでアクティブシートとcommandbuttonの関係が合致しない使い方が 可能になってしまっているのではないでしょうか。 もしくはサービスパックの適用がなされていない? If ActiveSheet.Shapes("CommandButton1").Visible = True Then MsgBox "true" If CommandButton1.Visible = True Then MsgBox "true" If ActiveSheet.CommandButton1.Visible = True Then MsgBox "true" If Sheets("sheet1").CommandButton1.Visible = True Then MsgBox "true"

zzzIIIzzz
質問者

お礼

回答ありがとうございます。 示していただいた4つの文のうち、2番目はエラーになりました。 その他は問題ありませんでした。 ただ、私が知りたいのは、3番目の文でも動くのに、なぜ1番目のように しなければいけないのかということです。 私が作ったプログラムはもう5年以上も前のもので、その間、何の問題も なく動いていました。それが突然「エラーが出た」という報告を受けたも のですから、OSやExcelのバージョンが変わるとプログラムも更新して いく必要があるかと思い、いろいろ調べてみました。その結果としての 質問でしたが、どうも私は見当違いの質問をしているのかと思うように なってきました。貴重な時間を割いて回答していただいたことに感謝 申し上げます。ありがとうございました。  

関連するQ&A

  • エクセルVBAでShapesまたはDrawingObjects

    シート上のフォームなどを表示/非表示するためtest04を書きましたが、「実行時エラー438 オブジェクトはこのプロパティまたはメッソッドをサポートしていません」となります。 しかし、Test05のように同じことをForNextで回せばうまくいきます。 また、Test06のようにShapesをDrawingObjectsに書き換えただけでもうまくいきます。 では、Test04がエラーになるのはなぜでしょうか? Sub test04() With ActiveSheet.Shapes If .Visible = False Then .Visible = True Else .Visible = False End If End With End Sub Sub test05() For Each sp In ActiveSheet.Shapes If sp.Visible = False Then sp.Visible = True Else sp.Visible = False End If Next End Sub Sub test06() With ActiveSheet.DrawingObjects If .Visible = False Then .Visible = True Else .Visible = False End If End With End Sub

  • 複数のセルのなかに該当があればオートシェイプを表示

    Excelで以下の図のような入力フォームを作成しています。 セルA1に1と入力したら1を◎で囲み、 セルB1からD1に2 4 5と入力したら2 4 5を○で囲みたいです。 それぞれの番号を囲むように、ふたつのオートシェイプを作成し、 それぞれに名前をつけました。 ◎をつける方法は以下のようにVBAを作成しうまくいったのですが、 ○をつける方法がわかりません。 ひとつでなく複数のセルを参照して、そのなかに該当があれば○をつける、 というやり方を教えていただけないでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub If Target.Value = "1" Then On Error GoTo SHAPEMAKE ActiveSheet.Shapes("1を囲む内側の○").Visible = True ActiveSheet.Shapes("1を囲む外側の○").Visible = True Else ActiveSheet.Shapes("1を囲む内側の○").Visible = False ActiveSheet.Shapes("1を囲む外側の○").Visible = False End If Exit Sub SHAPEMAKE: ・・・・・・ End With End Sub

  • 複数のセルのなかに該当があればオートシェイプを表示

    http://okwave.jp/qa/q8365189.html 上記質問の続きです。 画像のようなチェック表をExcelで作っています。 右側欄外に表を作成し、 ◎を付ける番号、○をつける番号をそれぞれ入力し、 「入力内容を反映」ボタンをクリックすると、 オートシェイプで配置した◎や○が表示されるようにしたいです。 VBAを以下のように作成してみたのですが、 ◎はつくのですが、 ○をつけるVBAが動きません。 どのように修正するべきでしょうか? ご教授ください! Private Sub CommandButton1_Click() '○で囲むVBA Dim c For Each c In Range("U103:Y103") If InStr(c.Value, "1") > 0 Then ActiveSheet.Shapes("1を囲む○").Visible = True Else ActiveSheet.Shapes("1を囲む○").Visible = False End If If InStr(c.Value, "2") > 0 Then ActiveSheet.Shapes("2を囲む○").Visible = True Else ActiveSheet.Shapes("2を囲む○").Visible = False End If Next c ・ ・ ・ '最も重要なものを◎で囲むVBA If Range("T103").Value = "1" Then ActiveSheet.Shapes("1を囲む◎").Visible = True Else ActiveSheet.Shapes("1を囲む◎").Visible = False End If If Range("T103").Value = "2" Then ActiveSheet.Shapes("2を囲む◎").Visible = True Else ActiveSheet.Shapes("2を囲む◎").Visible = False End If ・ ・ ・ End Sub ちなみに「'○で囲むVBA」のコードだけを残して動作させてみると、 1や2が一番右のセル(Y103)に入力されると、1を囲む○、2を囲む○がそれぞれ表示されるのですが、 それ以外のセル(U103からX103)に1や2を入力しても○は表示されません。 全コードを入力して動作させると、 1や2を一番右のセル(Y103)に入力しても○はどこにも表示されません。 よろしくお願いいたします!

  • Excel2003で簡単な図形の表示と非表示のプログラムを作成したので

    Excel2003で簡単な図形の表示と非表示のプログラムを作成したのですが上手く出来ません UserForm1に Private Sub OptionButton1 Click() ActiveSheet.Shapes("Oval 1").Visible=True 'ワークシート1に楕円の図形1表示 ActiveSheet.Shapes("Oval 2").Visible=False 'ワークシート1に楕円の図形2非表示 End Sub Private Sub OptionButton2 Click() ActiveSheet.Shapes("Oval 1").Visible=False 'ワークシート1に楕円の図形1非表示 ActiveSheet.Shapes("Oval 2").Visible=True 'ワークシート1に楕円の図形2表示 End Sub 上記の記述では上手くいくのですが、下記の様に ワークシート2の図形3と4も同様に表示・非表示したいため追加するとエラーになります。 UserForm1に Private Sub OptionButton1 Click() ActiveSheet.Shapes("Oval 1").Visible=True 'ワークシート1の楕円図形1表示 ActiveSheet.Shapes("Oval 2").Visible=False 'ワークシート1の楕円図形2非表示 ActiveSheet.Shapes("Oval 3").Visible=True 'ワークシート2の楕円図形3表示 ActiveSheet.Shapes("Oval 4").Visible=False 'ワークシート2の楕円図形4非表示 End Sub Private Sub OptionButton2 Click() ActiveSheet.Shapes("Oval 1").Visible=False 'ワークシート1の楕円図形1非表示 ActiveSheet.Shapes("Oval 2").Visible=True 'ワークシート1の楕円図形2表示 ActiveSheet.Shapes("Oval 3").Visible=False 'ワークシート2の楕円図形3非表示 ActiveSheet.Shapes("Oval 4").Visible=True 'ワークシート2の楕円図形4表示 End Sub VBAの勉強中の初心者です。教えて頂けないでしょうか。

  • [エクセル2007] 図形を非表示にするマクロ

    図形「図A」を非表示にするマクロがあります。 Sub 図削除() ActiveSheet.Shapes("図A").Visible = False End Sub これを図A、図B、図C・・・・・・と増やしていく場合はどうすれば良いのでしょうか? Sub 図削除() ActiveSheet.Shapes("図A").Visible = False ActiveSheet.Shapes("図B").Visible = False ActiveSheet.Shapes("図C").Visible = False            ・            ・             ・ End Sub とするしかないのでしょうか?

  • EXCEL VBA これであっていますか?

    エクセルに地図を貼り付け、その中のある地点Aから半径1キロ、2キロ、3キロといった具合に円を描いています。ある地点B、Cも同様に円があります。セルに“A” と入力した際に該当する地点の円(1キロ、2キロ、3キロの3種類)を赤く表示し、終了すると円が消える(線なしに変わる)ようにするために以下のようなVBAを組みました。が、円が2つしか赤くならなかったり、 ばあいによっては「インデックスが境界を超えています」とエラーが出たりします。 どうしたら良いか教えてください。 Sub iro() Dim i As Variant i = InputBox("表示する地点を指定してください", "地点指定") If i = "A" Then ActiveSheet.Shapes(1).Select ActiveSheet.Shapes(2).Select ActiveSheet.Shapes(3).Select Replace:=False hyoji MsgBox "表示を終了してよろしいですか", vbOKOnly ActiveSheet.Shapes(1).Select ActiveSheet.Shapes(2).Select ActiveSheet.Shapes(3).Select Replace:=False modosu ElseIf i = "B" Then ActiveSheet.Shapes(4).Select ActiveSheet.Shapes(5).Select ActiveSheet.Shapes(6).Select Replace:=False hyoji MsgBox "表示を終了してよろしいですか", vbOKOnly ActiveSheet.Shapes(4).Select ActiveSheet.Shapes(5).Select ActiveSheet.Shapes(6).Select Replace:=False Else MsgBox "指定した地点がありません", vbOKOnly End If End Sub Sub hyoji() Selection.ShapeRange.Line.Visible = msoTrue '「線なし」に設定されている場合、線を表示 Selection.ShapeRange.Line.ForeColor.SchemeColor = 10 Range("A1").Select End Sub Sub modosu() Selection.ShapeRange.Line.Visible = msoFalse '「線なし」に設定 Range("A1").Select End Sub

  • EXCELVBAで同じフォームボタンで表示のON/OFFをする。

    EXCELVBA初心者です。 図形描写の”表示”、”非表示”はできたのですが 同じボタンをクリックしてON/OFFする方法を教えてください。 ボタンが2個だといまいちなので、よろしくお願いします。 Sub 図形_del() ActiveSheet.Shapes("daily7").Visible = False End Sub Sub 図形_add() ActiveSheet.Shapes("daily7").Visible = True End Sub

  • Excel2007のカレンダーコントロール

    Excel2007のカレンダーコントロールで質問します。 Private Sub Calendar1_Click() ActiveCell.Value = Calendar1.Value ActiveSheet.Calendar1.Visible = False End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$4" Then ActiveSheet.Calendar1.Visible = True End If End Sub この状態ですと、セルA4をクリックしたときだけカレンダーコントロールが表示されます。 A列をどこでもクリックしたときにカレンダーコントロールが表示されるようにするには どこを、どう変更すればよいのでしょうか? 教えてください。

  • EXCELオプションボタンのグループ線非表示

    Sub test() Dim grp As Variant excel2000 でフォームのオプションボタンを多数設置しており、グループボタンの線をまとめて 非表示にしようと、下記コードでやってみたところ、反応がありません。 どこをどう修正すれば、いいかアドバイスいただけないでしょうか? よろしくお願いいたします。 For Each grp In Workbooks If grp.Name Like "グループ*" Then ActiveSheet.Shapes(grp).Visible = False End If Next grp End Sub

  • 【Excel VBA】ワークシートの表示(続き)

    すみません。 追記が出来なかったため、コードの続きをこちらに記載します。 For i = 1 To 12 If actsht = tmp(i) Then Flag = 1 Anser = MsgBox("翌月分シートを作成しますか?", vbYesNo + vbDefaultButton1, "確認") If Anser = vbYes Then ActiveSheet.Copy After:=ActiveSheet ActiveSheet.Name = tmp(i + 1) Sheets(actsht).Tab.ColorIndex = 2 Sheets(actsht).Range("B3").Value = Sheets("Sheet2").Range("A1").Value Sheets(actsht).Range("B4").Value = Sheets("Sheet2").Range("A2").Value ActiveSheet.Range("A2").Select Exit For ElseIf Anser = vbNo Then Exit For End If End If Next If Flag = O Then MsgBox ("新しいワークシートを作成出来ません。") End If If actsht = tmp(i) Then If Sheets(元データ).Visible = False Then Sheets(元データ).Visible = True End If End If End Sub