エクセルのシートにグループ化されたテキストボックス(シェイプ型)が配置されている場合、このグループ化されたテキストボックスのオブジェクトで作業できる事までは理解できたのですが、そのデータを取得しようとするとエラーとなってしまいます。何か良い方法はないのでしょうか?ご存知の方がいらっしゃいましたら教えてください。
よろしくお願いいたします。
Dim shpObj as shape
Dim shpObjG as shape
Dim strText as string
for each shpObj in Activesheet.Shapes
if shpObj.type = msoGroup then
for each shpObjG in shpObj.GroupItems
'これではエラーになる
strText = shpObjG.OLEFormat.Object.Text
next
elseif shpObj.type = msoTextBox then
'これは問題なくデータを得られる
strText = shpObj.OLEFormat.Object.Text
end if
next
ちなみに、shpObjG.AltanativeTextには、”テキスト ボックス:xxx”とxxxの部分にデータがあるのは確認されています。この文字列からデータを抜き出すしか方法はないのでしょうか?
試してないのですが
strText = shpObjG.OLEFormat.Object.Object.Text
か
strText = shpObjG.Object.Text
のどちらかで、うまくいくかもしれません。
LESIAさん、回答ありがとうございます。
shpObjGをウォッチでプロパティを確認したのですが、両プロパティとも存在していません。ウォッチで見えないプロパティも有効なのですか?
まずは試してみてください。
その上で、エラーが出たのでしたら、また質問してください。
LESIAさん。
前回の発言の時にプロパティーに存在しないこととあわせて動作も確認しました。言葉足らずですみません。
”そのプロパティーはサポートされていません”というようなメッセージでエラーとなりました。
う〜ん、エラーになりますか…。
ところで、Excelのバージョンは何でしょうか?
Excel2000で試してみたら、最初の
strText = shpObjG.OLEFormat.Object.Text
でも、エラーにならず取得できました。
バージョンの違いでうまくいかないんでしょうか?
また、
strText = shpObjG.TextFrame.Characters.Text
としても、同じものが取得出来ましたので、こちらではどうでしょうか。
Character.Textも試しましたが、
コンパイルエラー
プロパティの使い方が不正です。
が発生します。
今までのエラーは以下のものです。
実行時エラー 438
オブジェクトは、このプロパティまたはメソッドをサポートしていません。
エクセルのバージョンは2002(XP)です。
利用可能なオブジェクトのプロパティはバージョンによって代わってしまっているのでしょうか?
横レスすみません
LESIA さんは
>strText = shpObjG.TextFrame.Characters.Text
テキストボックスにはまってる さんは
>Character.Textも試しましたが
sがぬけているから
>オブジェクトは、このプロパティまたはメソッドをサポートしていません。
が出ているとか・・・・
すみません。
実際のコードはお知らせいただいた通りになっております。
発言したときに入力ミスをしています。
ウォッチで見ると"TextFrame"に対して"Characters"プロパティーが存在しません。また、OLEFormatのプロパティに関してはグループ化した状態だと"Text"プロパティは当然存在していますが、"TextBoxクラスのTextプロパティを取得できません”と表示されています。
ここまで分解してもエラー『型が一致しません』でした。
[Excel VBA]Excel2002(Sp3)
Dim shpObj As Shape
Dim shpObjG As Shape
Dim strText As String
Dim objFrame As TextFrame
Dim objChr As Characters
For Each shpObj In Worksheets("Sheet1").Shapes
If shpObj.Type = msoGroup Then
For Each shpObjG In shpObj.GroupItems
If shpObjG.Type = msoTextBox Then
'///shpObj.Ungroup.Select ' グループ化解除
Set objFrame = shpObjG.TextFrame
Set objChr = objFrame.Characters
strText = objChr.Text 'ここでエラーになる
End If
Next
ElseIf shpObj.Type = msoTextBox Then
'これは問題なくデータを得られる
strText = shpObj.OLEFormat.Object.Text
End If
Next
マクロを記録しようとしても、記録中にテキスト部分選択
できなくなるしw
全く同じコードでグループ化を解除したら取れました。
どうもグループ化が邪魔してるみたいですねぇ。
グループ化を解除して、その後、再グループ化するしかないですかねぇ。。。
特攻隊長まるるう 回答ありがとうございます。
同じような事や色々な方法で試しましたがだめでした。おっしゃってるような手法で逃げようと考えていました。とりあえず直接操作は諦めます。
色々と回答ありがとうございました。
ツイート | ![]() |