Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6463 / 13644 ツリー ←次へ | 前へ→

【45090】コメントの扱いを教えて下さい。 よちよち 06/12/12(火) 15:34 質問[未読]
【45092】Re:コメントの扱いを教えて下さい。 Kein 06/12/12(火) 15:50 回答[未読]
【45095】Re:コメントの扱いを教えて下さい。 よちよち 06/12/12(火) 16:23 質問[未読]
【45099】Re:コメントの扱いを教えて下さい。 Kein 06/12/12(火) 16:55 回答[未読]
【45115】Re:コメントの扱いを教えて下さい。 よちよち 06/12/13(水) 9:51 お礼[未読]

【45090】コメントの扱いを教えて下さい。
質問  よちよち  - 06/12/12(火) 15:34 -

引用なし
パスワード
   問題なく動いていたのに、セルに「コメント」を挿入したらエラーが出ました。
エラーの原因を見つけるために、該当部分だけ(下記)を絞り込んだのですが、
原因は判りません。
シートに楕円や四角の図形があるだけならエラーなく動きますが、どこかのセルに「コメント」を登録すると、SHA.Selectの行で、
 'Select' メッソッドは失敗しました'Shape'オブジェクト のエラーが発生します。
どうも「コメント」が悪さをしているようですが、回避策はありませんか?

Sub ABC()
  For Each SHA In ActiveSheet.Shapes
    SHA.Select
    If TypeName(Selection) = "Rectangle" Then
      MsgBox TypeName(Selection) & "を見つけました。"
    End If
  Next SHA
End Sub

【45092】Re:コメントの扱いを教えて下さい。
回答  Kein  - 06/12/12(火) 15:50 -

引用なし
パスワード
   四角形や楕円は、それを特定して処理できる"隠しオブジェクト"
を使った方が便利です。例えば四角形なら

Sub ABC()
  If ActiveSheet.Rectangles.Count = 0 Then
    MsgBox "四角形はありません"
  Else
    MsgBox "四角形を見つけました。"
  End If
End Sub

と、するだけです。
Rectangles は、Rectangleオブジェクトのコレクションです。

【45095】Re:コメントの扱いを教えて下さい。
質問  よちよち  - 06/12/12(火) 16:23 -

引用なし
パスワード
   ▼Kein さん:
早速のお答えありがとう御座います。
ちょっと質問を単純化しすぎました。
四角形の数や存在の有無を知りたいのではなく、各図形の属性を処理しています。
各図形については1つずつ処理が必要で、セルに「コメント」が挿入されている時に、.Select文で出るエラーを回避する方法を教えて下さい。


>四角形や楕円は、それを特定して処理できる"隠しオブジェクト"
>を使った方が便利です。例えば四角形なら
>
>Sub ABC()
>  If ActiveSheet.Rectangles.Count = 0 Then
>    MsgBox "四角形はありません"
>  Else
>    MsgBox "四角形を見つけました。"
>  End If
>End Sub
>
>と、するだけです。
>Rectangles は、Rectangleオブジェクトのコレクションです。

【45099】Re:コメントの扱いを教えて下さい。
回答  Kein  - 06/12/12(火) 16:55 -

引用なし
パスワード
   ならば単に Select しなければ良いだけのことではないでしょーか ?
図形に限らずオブジェクトを Select したり Active しないと出来ない
処理は殆ど無いのです。ま、今回のケースは
>各図形については1つずつ処理が必要
ということで「コメントを除いた全ての図形」を対象にできればいい
のだから・・

Sub Obj_Name()
  Dim Obj As DrawingObject
 
  For Each Obj In ActiveSheet.DrawingObjects
    Debug.Print Obj.Name & " : " & TypeName(Obj)
  Next
End Sub

と、DrawingObjectsコレクションオブジェクトをループするコードが、
適当かと思います。いちおう、Shapesコレクションをループするなら、
上にも書いたように、Select をしないで

Sub Obj_Name2()
  Dim Obj As Shape
 
  For Each Obj In ActiveSheet.Shapes
   If Obj.Name Like "Comment*" Then
   Else
     Debug.Print Obj.Name
   End If
  Next
End Sub

というコードで試してみて下さい。

【45115】Re:コメントの扱いを教えて下さい。
お礼  よちよち  - 06/12/13(水) 9:51 -

引用なし
パスワード
   ありがとう御座いました。
おかげさまで解決しました。
私のマシンでは、"DrawingObjects"はエラーになりましたので、
Shapesコレクションをループする方法で対処しました。

6463 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free