|    | 
     おはようございます。 
 
> 
>テキストが設定されたオートシェイプと、設定されていないオートシェイプがあり、それらを判別しようと思っています。 
 
> 
>IsNull(s.TextFrame.Characters.Text) 
> 
>では型が違うとおこられてしまいます。こういうときはどうすればいいんでしょうか? 
 
IsNull(s.TextFrame.Characters.Font.Name) 
 
では? 
 
 
また、 
 
>OnErrorを使う手もありますが、将来エラーでなくなったとき(そんなことはないのか?)修正が必要になりそうなのと、スパゲティ化(プロシージャへの切り分けがすすでいるので、めちゃくちゃにはならないけども)が嫌という、まあ、気分的なもので避けたいのです。あと、可読性もわるそうな気がします。(といいながら、OnError版は作ってしまいました)。 
 
将来エラーでなくなるという仕様変更まで言及すると??ですが、 
>スパゲティ化 
一例ですが 
 
Function HasText(shp As Shape) As Boolean 
 'HasText true ---テキストあり 
 '    false---テキストなし 
  On Error Resume Next 
  Dim g0 As Long 
  HasText = False 
  g0 = shp.TextFrame.Characters.Count 
  If Err.Number = 0 Then 
    If g0 > 0 Then 
     HasText = True 
    End If 
  End If 
  On Error GoTo 0 
End Function 
 
なんて作成しておいて、 
 
メインプロシジャーでは、 
 
Sub test() 
  Dim shp As Shape 
  Dim txt As Characters 
  For Each shp In ActiveSheet.Shapes 
    MsgBox shp.Name & "  " & IIf(HasText(shp), "テキストあり", "テキストなし") 
  Next 
End Sub 
 
このように引用すれば、可読性が悪いとは思いませんよ!! 
 
個人的な感想は、Functionの中のコードはともかく、Functionを使ってラップした方が 
 
IsNull(s.TextFrame.Characters.Font.Name) 
 
これより、意味はわかりやすいですが・・・。 
 
検討してみてください。 
 | 
     
    
   |