Excel VBA質問箱 IV

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

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


15294 / 76738 ←次へ | 前へ→

【66923】Re:未定義の変数?
発言  ichinose  - 10/10/17(日) 8:07 -

引用なし
パスワード
   おはようございます。

>
>テキストが設定されたオートシェイプと、設定されていないオートシェイプがあり、それらを判別しようと思っています。

>
>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)

これより、意味はわかりやすいですが・・・。

検討してみてください。
0 hits

【66919】未定義の変数? あきなす 10/10/17(日) 6:49 質問
【66920】Re:未定義の変数? 補足 あきなす 10/10/17(日) 7:13 発言
【66921】Re:未定義の変数? 補足 teian 10/10/17(日) 7:43 発言
【66924】Re:未定義の変数? 補足 あきなす 10/10/17(日) 8:20 発言
【66923】Re:未定義の変数? ichinose 10/10/17(日) 8:07 発言
【66925】Re:未定義の変数? あきなす 10/10/17(日) 8:52 お礼

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