
Excel VBA で、オートシェイプを扱おうとしています。
たとえば、
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 50, 50).Name = "TestShape1"
のようにして、それぞれ名前を付けているのですが、プログラム中、特定のオートシェイプを削除したり、再び同じ名前で作ったり、ということを行っています。
前者の場合、すでに当該オートシェイプが削除されている場合、目的のオートシェイプが存在していないためか、エラーが発生します。また後者の場合も、オートシェイプを重ねて作成することになってしまうケースにエラーが発生します。
On Error Resume Next で回避することも考えられるでしょうが、もっと直接的に、ある名前のオートシェイプが存在する/しない、をチェックしたうえで各処理を行うようにしたいのです。
どのような方法があるでしょうか?
No.1ベストアンサー
- 回答日時:
Dim objShp As Shape
For Each objShp In ActiveSheet.Shapes
If objShp.Name = "TestShape1" Then
処理Y '該当オートシェイプありの場合の処理
Else
処理N '該当オートシェイプなしの場合の処理
End If
Next
結局、いちいち名前を確認してやるしかないのですかね。
オートシェイプの数も少ないので、これでやることにします。
ありがとうございました。
No.2
- 回答日時:
先の回答は間違いでした。
(Dim 行はそのまま)
該当オートシェイプありで処理したい場合
For Each objShp In ActiveSheet.Shapes
If objShp.Name = "TestShape1" Then
処理 '該当オートシェイプありの場合の処理
End If
Next
----
該当オートシェイプなしで処理したい場合はたとえば(必要に応じて工夫してください)
For Each objShp In ActiveSheet.Shapes
If objShp.Name = "TestShape1" Then
MsgBox "該当オートシェイプあり"
Exit Sub 'あればマクロを終了
End If
Next
処理 '該当オートシェイプなしの場合の処理
----
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBA 同じ名前のオブジェクトを選択したいのですが
Visual Basic(VBA)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
UserForm1.Showでエラーになります。
工学
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
Excel(VBA)
Excel(エクセル)
-
7
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
8
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
9
Excelの任意セル上に図形がのっているかどうか?
Excel(エクセル)
-
10
オートシェイプがずれる
Excel(エクセル)
-
11
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
12
2画面表示でのVBAのボタン押下後のform表示の位置
Excel(エクセル)
-
13
マクロで選択した図形の選択状態を解除するには
Excel(エクセル)
-
14
コントロールの存在確認
Visual Basic(VBA)
-
15
【EXCEL VBA】オートシェイプをクリックした時にそのオートシェイプの名前を取得したい
Visual Basic(VBA)
-
16
Excelのシート上のShapeにイベントは設定できる?
Excel(エクセル)
-
17
コマンドボタンがあるかどうかを取得するには?
PowerPoint(パワーポイント)
-
18
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
19
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
20
VBA シートのボタン名を変更したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
private subモジュールを他のモ...
-
【C#/Java?】try-catchでcatch...
-
【Vb.net】プリンタジョブの取得
-
vbaのエラー対応(実行時エラー...
-
どう増強すべきか
-
IF文に時間(何時から何時ま...
-
VB2005のファイル読込でDo Whil...
-
ExcelのVBAで、選択したファイ...
-
どうやってもFor文を抜けてしま...
-
CImage::Loadの戻り値は何でし...
-
VB.NET SPRED(チェックボック...
-
途中で処理を中断させたい (ア...
-
StatusStripの表示が更新されな...
-
エクセル画面のちらつきなくす...
-
フォルダのアクセス権確認について
-
VBA For Each 〜 複数条件について
-
フォーカスがどこか行ってしまう
-
順番に処理させたい
-
RaiseEventのメリット
-
変数を使用したFunctionから戻...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
private subモジュールを他のモ...
-
vbaのエラー対応(実行時エラー...
-
シグナル 6(SIGABRT)とは?
-
IF文に時間(何時から何時ま...
-
マクロで、次のコードへ行く前...
-
Excel VBA セルの名前があるか...
-
どう増強すべきか
-
特定の名前のオートシェイプの...
-
途中で処理を中断させたい (ア...
-
特定のファイルを他のプロセス...
-
順番に処理させたい
-
Word VBA。各マクロの間に待ち...
-
StatusStripの表示が更新されな...
-
ドリブン??
-
ExcelのVBAで、選択したファイ...
-
RaiseEventのメリット
-
【VBA】エラー処理で別プロシー...
-
エクセルVBAでロックをかけたい
-
どうやってもFor文を抜けてしま...
おすすめ情報