• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:オートシェイプの文字が更新されない。)

オートシェイプの文字が更新されない

このQ&Aのポイント
  • EXCEL20007を使用している際に、オートシェイプのテキストが更新されない事象が発生しています。
  • 特定の条件下では、20シート中数シートでオートシェイプのテキストが更新されず、クリックすることで更新できる現象が発生しています。
  • マクロでのテキスト代入後、オートシェイプを再選択するなどの試みをしましたが、解決していません。どなたか解決策をご教示いただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

ふむ... 最低限の再現コードとしては Sub test()   With Workbooks.Add(xlWBATWorksheet).Sheets(1)     .TextBoxes.Add(100, 100, 100, 20).Text = "aaa"     .Copy .Parent.Sheets(1)     .Copy .Parent.Sheets(1)   End With End Sub これでできたBookをActiveにして Sub test2()   Dim ws As Worksheet   Dim s As String   s = "bbb"   For Each ws In Worksheets     With ws.TextBoxes(1)       .Text = s       '.Visible = False       '.Visible = True     End With   Next End Sub これで再現しますかね? winVista.Ult.sp2/xl2007sp2.12.0.6565.5003 の環境では確認できます。 winXPsp3/xl2007sp2(詳細未詳)の環境では、同一現象ではないですが 別シートに切り替える時にシートタブをマウスダウンしたままだと "aaa"でマウスアップのタイミングで"bbb"に更新されます。 先ほどの私のレスはこのXP環境だったので適切な対策ではなかったです。 結論としては test2のコメントアウト行を活かしてもらうとなんとかなるかな..と。 VisibleプロパティのFalse/Trueの切り換えで対処できるのではないでしょうか。

tomolyu
質問者

お礼

ありがとうございました、解決いたしました。 オートシェイプのVisibleプロパティのFalse/Trueの切り換えで、対応できました。 再現コードなど、ご助言ありがとうございました。

その他の回答 (3)

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.3

コードに不備があるとすれば、 sht.Activate sht.Shapes("カテゴリ名表示").Select の2箇所。 Active系とかSelect系の命令は失敗しやすいので 使わないようにし、オブジェクトに直接命令します。 まぁ、ただし、失敗した場合はデータが更新されないでしょう から、クリックしようが何しようが更新されないはず。 > この場合、「カテゴリ名表示」のオートシェイプをクリックすることにより、 > オートシェイプのテキストが更新されます。 更新されないから「何度もプログラムを実行して、その後に クリックしてみた」というのでもないと当てはまらない。 プログラムからは、いつ、どのシートの更新に命令したのか 確認しないと、プログラムの問題なのか、Excel の仕様に よるものかの切りわけが出来ないです。自分でログを出力して すべてのシートに命令を出しているか確認して下さい。 命令を出している事が確実に分かったなら、何らかの設定が 違うのでしょう。怪しいのは、 ・設定する文字列に含まれる特殊コード ・設定する文字列の長さ ・シェイプのサイズ ・シートの保護、ロックとの組合せ ・Excelの表示更新設定 ・Excelの自動計算設定 とか。 テスト用コードを書いて地道に調べるしかないですね。

tomolyu
質問者

お礼

ありがとうございました。 次回より、ログ出力なども視野に入れて取り組もうと思います。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

質問のコードをシート小数例でシェイプの四角でやってみましたが、おかしいところは発見できない。 For Each objShp In ActiveSheet.Shapes  の後に MsgBox objShp.Name または  MsgBox sht.Name & " " & objShp.Name   を入れて問題の個所のオブジェクトの名前が「カテゴリ名表示」かチェックする。 もちろんシートの表示・表示しないを勘案すること。 またはそのオブジェクトをとらえて、シートの左上の名前ボックスに「カテゴリ名表示」と出るかどうかチェックしては。 ーー こういうバグの質問は、所詮原因究明は無理でしょう。 パソコンにも触っつて確認したり出来ず、データやオブジェクトもわからないから。 読者側で追試行が出来る状態を示せなければ。 数日置いておいて適当な解答が付かなければ、あきらめてください。

tomolyu
質問者

お礼

ご助言、ありがとうございました。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

画面描画更新がおいついていないのかもしれませんね。 実行中ちらつきますが、下記コードだとどうなりますか? For Each sht In Worksheets   If sht.Visible = True Then     For Each objShp In sht.Shapes       'カテゴリ名表示というオートシェイプがあるかチェック       If objShp.Name = "カテゴリ名表示" Then         sht.Activate         '存在すれば、カテゴリ名をセット         objShp.TextFrame.Characters.Text = カテゴリ名         Application.ScreenUpdating = True         Exit For       End If     Next   End If Next

関連するQ&A