質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

13956閲覧

見えないshapeがマクロ動作に影響し意図した動作を妨げる問題

vitabrevisarsl1

総合スコア57

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2017/11/11 04:12

イメージ説明

vba

1Sub test() 2Debug.Print ActiveSheet.Shapes.Count 3 For Each btn In ActiveSheet.Shapes 4 'ActiveSheet.Shapes(13).Select 5 Debug.Print btn.AlternativeText & " " & CStr(btn.TopLeftCell.Row) 6 Next 7End Sub

12個のshapes(テキストボックスx1、ボタンx8、図x3)があるシートで、▲釦を押下した際に正常に上に移動しないため、「Sub test()」にて確認したところ、shapeを13個認識している模様です。

**a)**シートの倍率を10%にしても、**b)**ctrl+endでも、最後の1個が選択できないため、削除できません。
「Sub test()」4行目に「ActiveSheet.Shapes(13).Select」としてみると、「実行時エラー '-2147467259(80004005)' 'Select'メソッドは失敗しました: 'Shapeオブジェクト'」となります。

vba

1Sub sample() 2Sheets("当該シート名").DrawingObjects.Delete 3End Sub

で **c)**12個のshapes削除を試み、さらに念のため当該シートRow3のプルダウンリストも削除してみますと、12個のshapes削除は確認されますが、ActiveSheet.Shapes.Count → 1 が帰ってきます。

▲釦の動作については、昨日はこのようなことはなかったので、コードを修正加筆する間に余計なものが紛れ込んだのか、、、それも確認しています。

邪魔している最後の1個を排除し▲釦を意図通りに動作させたいです。

いつもお世話になって入ります。コメントいただいた方々には感謝いたしております。ご教授いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

VBAマクロを実装中に同じ事象で辿り着きました。
本件は「解決済」となっていましたが、参考になればとコメントしました。

Excelの入力規則で「リスト」としたセルがアクティブになるとドロップダウンが表示されますが、この際Excelが「Drop Down XXX」というオブジェクトを生成するようです(図1)。

セルが非アクティブになると、オブジェクトは非表示になります(図2)。

このオブジェクトはブックを開いた直後は存在せず、該当のセルがアクティブになった場合に初めて生成され、以降は違うセルの入力規則(リスト)でも同じオブジェクトを使いまわしているようです。

「Ctrl + S」でブックを保存すると、勝手に消えました(図3)。

BeforeSaveなどのイベントでShapes.Countとすると、オブジェクト数が「1」で取得されるため、想定したオブジェクト数と異なる判定を招くことがあると思います。

※この入力規則(リスト)で生成されたオブジェクトは扱いが特殊なのか、UI経由で選択できないほか、マクロから削除しようとすると「メモリが不足しています」というエラーが発生しました。エラーの内容と理由ははっきりわかりませんが、このオブジェクトが起因しているようでした。

図1
イメージ説明

図2
イメージ説明

図3
イメージ説明

投稿2019/02/23 13:25

編集2019/02/23 13:32
tontokoton

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

現象が発生するExcelを持っていないので確かなことが言えませんが、VBA Editorのウォッチ式をつかうと直接Shapesの内容を確認することができ、原因が分かる可能性があります。

使い方は、以下のようにデバッグメニューの中ののウォッチ式の追加を選び
イメージ説明
ActiveSheet.Shapesを指定します。すると、次のような画面に代わります。
イメージ説明
ウォッチ式のツリーに存在する
イメージ説明
をダブルクリックすると、その内容が以下のように細かく確認することができます。細かくShapeの情報を調べると原因がわかるかもしれません。
イメージ説明

投稿2017/11/11 12:46

diracpaul

総合スコア157

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vitabrevisarsl1

2017/11/11 14:32 編集

・ご教授ありがとうございます。  事後報告致します。  ウオッチ式で余分なshapeを観たところ、参加▲ボタンが2つ重なっていることが判明(▼ボタンは重なり無し)。  ↓  余分のボタンを削除し、▲ボタンが重なっていないことを確認するも数が合わない。  ↓  ウオッチ式で再確認すると今度は▼ボタンが重なっていました。  さらに Name"Drop Down 211" - AlternativeText "" というshapeが最後に存在しておりました。  ↓  ▼ボタン手動削除。  ↓ Select Case (ss(ix).AlternativeText) Case "▲"~ Case "▼"~ Case ""    ss(ix).Delete End Select としました。  ボタンの重なりは手動で為したことではないため、Drop Down 211なる何者なのか判然としないものの悪影響と考えます。様子見いたします。
ExcelVBAer

2019/02/25 00:04

シート上に、入力規則のブルダウンはありませんか? プルダウンを設定しているセルを選択すると、右側に▼が見えますよね? あれ、シェイプとして認識されてたと思います。 (何も操作はできなかったはずです。。。) なので、意図したシェイプに処理をしたい場合、 Typeで判定したりします。 更に厳密に処理したければ、 シェイプ自体に名前を付けて、名前で判定する方法もあります。 ※シェイプ選択状態で、左上に表示された名前欄に、任意の名前をセットします)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問