- ベストアンサー
オートシェイプの文字が更新されない
- EXCEL20007を使用している際に、オートシェイプのテキストが更新されない事象が発生しています。
- 特定の条件下では、20シート中数シートでオートシェイプのテキストが更新されず、クリックすることで更新できる現象が発生しています。
- マクロでのテキスト代入後、オートシェイプを再選択するなどの試みをしましたが、解決していません。どなたか解決策をご教示いただけないでしょうか。
- みんなの回答 (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の切り換えで対処できるのではないでしょうか。
その他の回答 (3)
- MARU4812
- ベストアンサー率43% (196/452)
コードに不備があるとすれば、 sht.Activate sht.Shapes("カテゴリ名表示").Select の2箇所。 Active系とかSelect系の命令は失敗しやすいので 使わないようにし、オブジェクトに直接命令します。 まぁ、ただし、失敗した場合はデータが更新されないでしょう から、クリックしようが何しようが更新されないはず。 > この場合、「カテゴリ名表示」のオートシェイプをクリックすることにより、 > オートシェイプのテキストが更新されます。 更新されないから「何度もプログラムを実行して、その後に クリックしてみた」というのでもないと当てはまらない。 プログラムからは、いつ、どのシートの更新に命令したのか 確認しないと、プログラムの問題なのか、Excel の仕様に よるものかの切りわけが出来ないです。自分でログを出力して すべてのシートに命令を出しているか確認して下さい。 命令を出している事が確実に分かったなら、何らかの設定が 違うのでしょう。怪しいのは、 ・設定する文字列に含まれる特殊コード ・設定する文字列の長さ ・シェイプのサイズ ・シートの保護、ロックとの組合せ ・Excelの表示更新設定 ・Excelの自動計算設定 とか。 テスト用コードを書いて地道に調べるしかないですね。
お礼
ありがとうございました。 次回より、ログ出力なども視野に入れて取り組もうと思います。
- imogasi
- ベストアンサー率27% (4737/17069)
質問のコードをシート小数例でシェイプの四角でやってみましたが、おかしいところは発見できない。 For Each objShp In ActiveSheet.Shapes の後に MsgBox objShp.Name または MsgBox sht.Name & " " & objShp.Name を入れて問題の個所のオブジェクトの名前が「カテゴリ名表示」かチェックする。 もちろんシートの表示・表示しないを勘案すること。 またはそのオブジェクトをとらえて、シートの左上の名前ボックスに「カテゴリ名表示」と出るかどうかチェックしては。 ーー こういうバグの質問は、所詮原因究明は無理でしょう。 パソコンにも触っつて確認したり出来ず、データやオブジェクトもわからないから。 読者側で追試行が出来る状態を示せなければ。 数日置いておいて適当な解答が付かなければ、あきらめてください。
お礼
ご助言、ありがとうございました。
- end-u
- ベストアンサー率79% (496/625)
画面描画更新がおいついていないのかもしれませんね。 実行中ちらつきますが、下記コードだとどうなりますか? 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
お礼
ありがとうございました、解決いたしました。 オートシェイプのVisibleプロパティのFalse/Trueの切り換えで、対応できました。 再現コードなど、ご助言ありがとうございました。