tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: シートのActiveXコントロールの内容が表示されない。
投稿日: 2020/05/13(Wed) 21:49
投稿者魔界の仮面弁士
> WorkSheets("Sheet1").Active
> 「.Active」のあとに
Active …?
Activate ではなく?


> ActiveXのラベルの内容は空白なってしまっています。
フォーム コントロールの Label ではなく、
ActiveX コントロールの方の Label なのですね。

ラベルの内容を、コードで書き換えてから撮影しているのでしょうか?
それが反映されないのだとしたら、メッセージループが処理されていないからでしょう。


> 「Application.Wait [Now()] + 5000 / 86400000」を入れて5秒待ちを作ってみたのですが
時間の問題ではなく、ビジー状態か否かという点だと思います。
Label の内容を書き換えたとしても、その内容が画面に反映されるのは、
通常、イベント処理の終了後になるからです。

ActiveX コントロールの描画が更新されるには、Excel が
ユーザー操作を受け付ける状態になっていなければなりません。

たとえば
 Application.Wait DateAdd("s", 5, Now)
などで 5 秒間待機させると、VBA 側のタイトルバーに "[実行中]" と
表示された状態のまま待たされます。

この間、Wait が終わるまでユーザー操作を受け付けないビジー状態となるため、
画面の描画は直ちに更新されず、後回しにされます。

ユーザー操作を受け付ける状態…たとえば、VBA のブレイク中や、
VBA コードの実行が終わってアイドル状態になっている時、あるいは、
MsgBox や InputBox などが表示された場合など…であれば、
その時点で再描画が実施されます。


経験則になりますが、コード中で強制的に再描画したい場合は、
 Dim w As Double
 With 対象のラベル
  w = .Width
  .Width = w + 10
  .Width = w
 End With
などとしてリサイズしてやると、描画結果が更新されるかと思います。
すべてのコントロールに有効な方法というわけではないですが、
Label が相手ならこれでいけるでしょう。



> WorkSheets("Sheet1").Range("A1:R37").Select
> WorkSheets("Sheet1").Range("A1:R37").CopyPicture appearance:=xlScreen, Format:=xlPicture
手元の環境で試したところ、非表示なシート上のセル範囲やチャートであったとしても、
CopyPicture は動作しました。わざわざアクティブ化する必要は無いかもしれません。


>  Worksheets("Sheet2").Paste Range("B2")
引数に渡している Range("B2") が、どのシートを指しているのか曖昧な表記なので、
親となるワークシートを添えて、明示的に指定した方が良いと思います。


> この状態で、張り付けられた画像を見ると、グラフは表示されているんですが
張り付け → 貼り付け

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。