タイトル : 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") が、どのシートを指しているのか曖昧な表記なので、 親となるワークシートを添えて、明示的に指定した方が良いと思います。 > この状態で、張り付けられた画像を見ると、グラフは表示されているんですが 張り付け → 貼り付け |