none
セルの値が表示されない件について教えてください RRS feed

  • 質問

  • VBAで日誌を作成・管理しています。オフィスバージョン2013で作成したものを2013をインストールしているPCと2010をインストールしているPCで使用しています。使い方は、ユーザーフォームで作成した「文字列」や「数値」データをシートの転記し、印刷・保存しています。昨年あたりから、フォームデータをシートに転記するとセルの値が表示されない現象がおき始めました。この現象は2013、2010いずれでも発生し、また発生する場合とそうでない場合があります。任意のセルをクリックしたり、シートをスクロールするとセルの値が表示され印刷も可能になります。なぜこのようなことが発生するのか、また解決策はあるのか、ご存知の方がおられましたらお教えいただけないでしょうか。宜しくお願い致します。

    2017年2月18日 2:52

すべての返信

  • 再現させることができないので何とも言えませんが、VBAの関数の中で、

    Application.ScreenUpdating = False ' 画面更新を停止

    と設定していて、そのあと

    Application.ScreenUpdating = True ' 画面更新を再開

    としていないとかではないでしょうか?

    再現する最小限のコードはご提示可能でしょうか?

    2017年2月18日 3:10
  • 表示されない状態の時に印刷や保存したものにも値が入ってなかったら、書いたコードに問題がある可能性がほぼ100%でしょう。
    そうでなく、表示だけの問題でしたら環境側に問題がある可能性が上がってきます。
    2017年2月18日 4:40
  • ご回答をお寄せいただきありがとうございます。Application.ScreenUpdating = False並びにApplication.ScreenUpdating = Trueを設定した上で、例えば次のようなコードを書いています。「Sheets("○×△").Range("B2").Value=UserForm1.TextBox1.Value」。他のコードもフォーム上のデータをシートに単純に転記するものです。ただ、説明不足な点がありましたので、説明を加えさせていただきます。①拡張子は「.xls」です。②セルは統合セル・単体セルが混ざっています。③ユーザーフォーム起動時はシートは最小化し、データ転記時にシートを最大化するようにしています。説明不足で誠に申し訳ありません。改めてお気づきの点等在りましたらご教示ください。宜しくお願い致します。

    2017年2月18日 7:25
  • 結局シートをスクロールしたりすると表示されるようになるため、止む無く次のようなコードを入れて正常化させています。フォーム上のデータをシートに転記し、ユーザーフォームをUnLoadさせた後に、(例えば次のようなコードを書いています)ActiveSheet.Range("A30").Select、ActiveSheet.Range("A1").Select。これでシート上の(セル値)が表示されます。説明不足な点がありましたので、説明を加えさせていただきます。①拡張子は「.xls」です。②セルは統合セル・単体セルが混ざっています。③ユーザーフォーム起動時はシートは最小化し、データ転記時にシートを最大化するようにしています。説明不足で誠に申し訳ありません。改めてお気づきの点等在りましたらご教示ください。宜しくお願い致します。

    2017年2月18日 7:30
  • 繰り返しますが、表示だけの問題なのか、印刷または保存したときにも影響がでるのか、で大きく違ってきます。
    2017年2月18日 9:45
  • 追加の情報ありがとうございます。

    ただ、こちらで再現させることができませんでした。試したユーザーフォームのコードは下記のようなものです。

    Private Sub CommandButton1_Click()
        Application.ScreenUpdating = False
        ActiveSheet.Range("A1").Value = TextBox1.Text
        Application.ScreenUpdating = True
        ActiveWindow.WindowState = xlMaximized
        Unload UserForm1
    End Sub
    
    Private Sub UserForm_Initialize()
        TextBox1.Text = ActiveSheet.Range("A1").Value
        ActiveSheet.Range("A1").Value = ""
        ActiveWindow.WindowState = xlMinimized
    End Sub
    

    その他色々と実験して試してみましたが、こちらで再現させることが出来きないので、

    例えば、「Application.ScreenUpdating = False」と「Application.ScreenUpdating = True」を書いている部分をいったん削除して、再現するかどうか、「Sheets("○×△").Range("B2").Value=UserForm1.TextBox1.Value」と書いてある部分の直後に「Application.ScreenUpdating = True」を書いてみて再現するか、シートの最小化・最大化をやめてみて再現するかどうか、拡張子を「xlsm」として再現するか、Excelのシートを新規作成してシンプルなシートで再現するかどうかなど、問題とは関係ない要素を取り払っていき、再現する条件を出来る限りシンプルに絞り込んで行くことは可能でしょうか?

    2017年2月18日 10:08
  • ご回答ありがとうございます。喜んでいいのか、残念に思えばいいのかわかりませんが、先ほど試したときはセル値が表示されない不具合が発生しませんでした。ただ何ら手段を講じたわけではないので、現象は再現されると思っています。ご提案いただいた内容、「「Application.ScreenUpdating = False」と「Application.ScreenUpdating = True」を書いている部分をいったん削除して、再現するかどうか」など、実際に試してみます。結果は改めてご報告させていただきます。一緒にお考えいただき、皆様には大変感謝しております。ありがとうございました。
    2017年2月18日 12:11