|
VBA初心者です。
色々調べてみたのですが、よく分からないので質問させてください。
Excelのバージョンは2003です。
テキストが設定されたオートシェイプと、設定されていないオートシェイプがあり、それらを判別しようと思っています。
文字列が設定されたオートシェイプのテキストフィールドへのアクセスは
Dim s As Shape
For Each s In ActiveSheet.Shapes
If s.TextFrame.Characters.Text="Hogehoge" then
:
でできます。これに対して、テキストフィールドに文字が設定されていない場合、ウォッチウィンドウでみてみると、Text変数自体が未定義?となっているため、上記のコードではエラーが出てしまいます。質問は、Text変数が定義されているか否かを判定する方法があるかどうかです。
IsNull(s.TextFrame.Characters.Text)
では型が違うとおこられてしまいます。こういうときはどうすればいいんでしょうか?
もちろん、回避策としてs.AlternativeTextが使えますが、Excel2007に持っていった時につかえなくなってしまったため、根本的な解決策をとりたいと思った次第です。
OnErrorを使う手もありますが、将来エラーでなくなったとき(そんなことはないのか?)修正が必要になりそうなのと、スパゲティ化(プロシージャへの切り分けがすすでいるので、めちゃくちゃにはならないけども)が嫌という、まあ、気分的なもので避けたいのです。あと、可読性もわるそうな気がします。(といいながら、OnError版は作ってしまいました)。
20年くらい前にN88-BASICを触って以来のBASICだったので、懐かしい感じをうけつつも、オブジェクト化がずいぶん進んで、隔世の感です。N88-BASIC時代は、3000行も書けば、わけがわからなくなってたのを思い出しました(笑)
|
|