次の方法で共有

2007以前で作成したExcelファイルを2007で開くと、テキストボックスが増殖しています。原因と対策をご教示下さい。

Anonymous
2011-08-08T01:01:52+00:00

お世話になります。ご教示のほど宜しくお願い致します。

掲題のような現象が起き、プログラムなども作成しましたが、下記プログラムでは拾えませんでした。

2007ではテキストボックスの幅が狭くても文字が表示されると聞き、対象ファイルにすでに

テキストボックスが存在しているのだと思いまして、2003で開いて探しましたが

見つかりません。マウスポインタも変わらないので存在していない気もします。

2007で無数に表示されている "テスト"  というテキストボックスの文字が、下記で拾えないことも

わかりませんし、なぜこのような現象が起きるのか、原因もわかりません。

何卒、ご教示のほど宜しくお願い致します。

Sub Del()

Dim Shp As Shape

Dim i As Integer

Dim mySht1 As Worksheet

For i = 1 To Worksheets.Count

    Set mySht1 = Worksheets(i)

        For Each Shp In mySht1.Shapes

        If Shp.Type = msoTextBox Then

            If Shp.DrawingObject.Caption = "テスト" Then

                Shp.Delete

            End If

        End If

        Next

Next i

End Sub

Microsoft 365 と Office | Excel | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2011-08-09T01:17:08+00:00

>For Eachですので大丈夫なのかもしれませんが、オブジェクトの削除は

>後ろのほうからやるほうが紛れがありません。

少し補足しますと、次のような理由です。

For i=0 to n

  Item(i).Delete

next

とやる方が結構いるのですが、これをやると、削除の度にコレクションのインデックスとの対応が前にずれてきて、おかしなことになります。

For Eachの場合は大丈夫なような気もするのですが、For Eachの検索順がはっきりしませんので、私は削除は逆順からやることにしてます。

>MsgBox Shp.DrawingObject.Captionの部分でとまってしまいました。

msoTextBoxのチェックをはずしたためです。

そのようにした理由はTextBoxではなくAutoShapeでチェックにかからなかったのではないかと疑ったためです。

ただ、確かにテキストが入っていないオートシェイプなどがあるとコケますので一工夫必要になります。

その疑いを捨てきったわけではありませんので、次のようにされたらいかがでしょうか?

(もし、テキストボックスだけと確信があればmsoTextboxのチェックでかまいません)

1.文字列のはいっていないものはエラーになって無視される

2.テキストの中に"テスト"が入っているものをピックアップする。(前後にブランクなどがあっても拾う)

3.一応逆順に検索

Sub aaa()

Dim wShp As Shape, wText As String, I As Long

For I = ActiveSheet.Shapes.Count To 1 Step -1

   Set wShp = ActiveSheet.Shapes(I)

   On Error Resume Next

      wText = wShp.TextFrame.Characters.Text

      If Err.Number = 0 Then

        If InStr(wText, "テスト") > 0 Then

           MsgBox wText

        End If

      End If

    On Error GoTo 0

Next

End Sub

この回答は役に立ちましたか?

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2011-08-08T06:24:50+00:00

単に"テスト"なる文字列を引っ掛けられていないのではないかと思います。

DrawingObjectsでも動くはずですが、今はほとんど使われていないと思います。

↓は削除もなにもしないコードですので、テキストボックスの中の文字列が表示できるかどうか確認してください。

Sub aaa()

Dim wShp As Shape

For Each wShp In ActiveSheet.Shapes

   MsgBox wShp.TextFrame.Characters.Text

Next

End Sub

もと口さんのコードを生かせば↓です。

Sub Del()

Dim Shp As Shape

Dim i As Integer

Dim mySht1 As Worksheet

For i = 1 To Worksheets.Count

    Set mySht1 = Worksheets(i)

        For Each Shp In mySht1.Shapes

          MsgBox Shp.DrawingObject.Caption

        Next

Next i

End Sub

もし、どちらでも"テスト"と表示されるなら、文字列の後にブランクがついているとかそういう簡単な話じゃないかと思いますよ。

それと、これは後の話ですが、削除のところが少々気になります。

For Eachですので大丈夫なのかもしれませんが、オブジェクトの削除は後ろのほうからやるほうが紛れがありません。

Sub bbb()

Dim i As Long

With ActiveSheet

  For i = .Shapes.Count To 1 Step -1

     .Shapes(i).Delete

  Next

End With

End Sub

この回答は役に立ちましたか?

0 件のコメント コメントはありません

6 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2011-08-08T07:43:23+00:00

    y sakuda 様

    確認遅くなりますが一度試してみます。

    ありがとうございます。

    取り急ぎ中間報告迄。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2011-08-08T05:42:02+00:00

    y sakuda 様

    ありがとうございます。お世話になります。

    http://questionbox.jp.msn.com/qa2245033.html

    http://questionbox.jp.msn.com/qa3628323.html

    似たような現象が起こっているというサイトを見つけましたが

    どれも出来上がったテキストボックスを削除する方法しか

    載っていませんでした。

    1.Excel2007でオブジェクトは選択出来ます。

      左上の名前の項目には TextBox121 などとなっておりました。それらの番号は全てバラバラでした。

    2.手動で削除出来ます。幅はゼロかもしれません。

    3.TextBox121 などとなっていましたのでテキストボックスだと思いました。

    4.2003でも2007でもコードを実行しました。

      2003では現象が再現出来ない為、手動でテキストボックスを作成し、それを削除しました。

      うまくいきましたので 2007で実行したのですが 削除できませんでした。

      内容が違うのかと思い、"テスト" の後ろに半角スペースを入れたりしてみましたがダメでした。

    テキストボックスを全て消す、としてしまうと 必要なものまで全て消えてしまうので

    If Shp.DrawingObject.Caption = "テスト" Then としました。

    何卒宜しくお願い致します。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2011-08-08T03:52:41+00:00

    現時点の情報では、原因と対策と言われても現象自体が不明です。

    少なくとも良く知られているトラブルの類ではありません。

    (不可視のオブジェクトがコピー&ペーストで知らない内に増殖ってのはありえますが・・・・)

    と言うことで、まず何が起こっているか絞りこまないと話になりませんが、投稿されている内容でいくつか疑問点があります。

    1.Excel2007でその表示されているオブジェクトは選択できるのでしょうか?

      また、選択できるとすると、アドレスボックスに通し番号がついたオブジェクト名が表示されるはずですが、オブジェクト毎に番号が変わっているでしょうか?それと大きな番号がついているんでしょうか?

      オブジェクト名の例を提示願います。

    2.Excel2007で選択できるとして、手動で削除できますか?

    3.どうやってオブジェクトの種類をテキストボックスと特定されたのでしょうか?

    4.提示されたコードで2003で削除を試みられたようですが、2007で試みられていない理由はなんでしょうか?

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません