|
おはようございます。
>
>テキストが設定されたオートシェイプと、設定されていないオートシェイプがあり、それらを判別しようと思っています。
>
>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)
これより、意味はわかりやすいですが・・・。
検討してみてください。
|
|