シェイプのテキストボックス

解決


テキストボックスにはまってる  2006-12-06 03:20:42  No: 134448

エクセルのシートにグループ化されたテキストボックス(シェイプ型)が配置されている場合、このグループ化されたテキストボックスのオブジェクトで作業できる事までは理解できたのですが、そのデータを取得しようとするとエラーとなってしまいます。何か良い方法はないのでしょうか?ご存知の方がいらっしゃいましたら教えてください。

よろしくお願いいたします。

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の部分にデータがあるのは確認されています。この文字列からデータを抜き出すしか方法はないのでしょうか?


LESIA  2006-12-06 03:50:09  No: 134449

試してないのですが
strText = shpObjG.OLEFormat.Object.Object.Text

strText = shpObjG.Object.Text
のどちらかで、うまくいくかもしれません。


テキストボックスにはまってる  2006-12-06 07:28:08  No: 134450

LESIAさん、回答ありがとうございます。

shpObjGをウォッチでプロパティを確認したのですが、両プロパティとも存在していません。ウォッチで見えないプロパティも有効なのですか?


LESIA  2006-12-06 13:17:10  No: 134451

まずは試してみてください。
その上で、エラーが出たのでしたら、また質問してください。


テキストボックスにはまってる  2006-12-07 08:49:48  No: 134452

LESIAさん。

前回の発言の時にプロパティーに存在しないこととあわせて動作も確認しました。言葉足らずですみません。
”そのプロパティーはサポートされていません”というようなメッセージでエラーとなりました。


LESIA  2006-12-07 19:21:19  No: 134453

う〜ん、エラーになりますか…。
ところで、Excelのバージョンは何でしょうか?
Excel2000で試してみたら、最初の
strText = shpObjG.OLEFormat.Object.Text
でも、エラーにならず取得できました。
バージョンの違いでうまくいかないんでしょうか?

また、
strText = shpObjG.TextFrame.Characters.Text
としても、同じものが取得出来ましたので、こちらではどうでしょうか。


テキストボックスにはまってる  2006-12-07 19:42:03  No: 134454

Character.Textも試しましたが、

コンパイルエラー
プロパティの使い方が不正です。

が発生します。

今までのエラーは以下のものです。

実行時エラー  438
オブジェクトは、このプロパティまたはメソッドをサポートしていません。

エクセルのバージョンは2002(XP)です。
利用可能なオブジェクトのプロパティはバージョンによって代わってしまっているのでしょうか?


ぶぶ  2006-12-07 19:46:43  No: 134455

横レスすみません

LESIA さんは
>strText = shpObjG.TextFrame.Characters.Text
テキストボックスにはまってる  さんは
>Character.Textも試しましたが

sがぬけているから
>オブジェクトは、このプロパティまたはメソッドをサポートしていません。

が出ているとか・・・・


テキストボックスにはまってる  2006-12-07 20:35:22  No: 134456

すみません。

実際のコードはお知らせいただいた通りになっております。
発言したときに入力ミスをしています。

ウォッチで見ると"TextFrame"に対して"Characters"プロパティーが存在しません。また、OLEFormatのプロパティに関してはグループ化した状態だと"Text"プロパティは当然存在していますが、"TextBoxクラスのTextプロパティを取得できません”と表示されています。


特攻隊長まるるう  2006-12-09 05:19:44  No: 134457

ここまで分解してもエラー『型が一致しません』でした。
[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
全く同じコードでグループ化を解除したら取れました。
どうもグループ化が邪魔してるみたいですねぇ。
グループ化を解除して、その後、再グループ化するしかないですかねぇ。。。


テキストボックスにはまってる  2006-12-14 23:26:47  No: 134458

特攻隊長まるるう  回答ありがとうございます。

同じような事や色々な方法で試しましたがだめでした。おっしゃってるような手法で逃げようと考えていました。とりあえず直接操作は諦めます。

色々と回答ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加