タイトル | : Re^2: シートのActiveXコントロールの内容が表示されない。 |
記事No | : 16575 |
投稿日 | : 2020/05/16(Sat) 21:18 |
投稿者 | : 悩めるEXCELマクロ士 |
魔界の仮面弁士 さま
お世話になります。返信が遅くなってしまって申し訳ありませんでした。
> Active …? > Activate ではなく? 『Activate』の間違いでした。
> 時間の問題ではなく、ビジー状態か否かという点だと思います。 なるほど、やはりそうですよね。何度か手直しをしているうちに なんとなくそうではないかと思っていました。
とりあえず、当方の環境を説明していなかったので書きます。 OS :Windows10 Office:Office365 32ビット版 です。 EXCELとしては、シートの数は設定シートなどを含めて20シートほど そのうち、メニュー画面として使っているシートグラフを表示するシート スクリーンショットで撮影した画像を貼り付ける為のシートがあります。 メニューシートには、ActiveXのCommandボタンを配置してあるだけで クリックするとユーザーフォームが起動して日付とコードを入力。 作成ボタンを押すとグラフ作成と画像貼り付けを行うプログラムが走る というような流れです。 で、結論からいうとお教えいただいた方法をベースに試作したところ なんとか表示さるようになりました。 ですが、新たな問題として連続して同じ処理を実行するとEXCELがフリーズ してしまうという現象が出るようになってしまいました。 試作したプログラムを記述すると
Sub Graph_CopyPast()
Dim w As Double Di tmpCNTNM As Variant
Application.ScreenUpdating =True With Worksheets(グラフシート名) For Each tmpCNTNM In .OLEObjects DoEvents Select Case True Case Instr(tmpCNTNM.Name,"lbl") >= 1 Or _ Instr(tmpCNTNM.Name,"cmb") >= 1 w=tmpCNTNM.Width tmpCNTNM.Width=w+10 tmpCNTNM.Width=w End Select Next tmpCNTNM .Range("A1:R37").CopyPicture Appeaance:=xlScreen,Format:=xlPicture Worksheets(画像貼り付け先シート名).Past Worksheets(画像貼り付け先シート名).Cells(5,9) Application.CutCopyMode=False End With Application.ScreenUpdating = False
というプログラムです。 解説すると、 最初に『Application.ScreenUpdating =True』しているのは、 実行ボタンが押されたときに画像描画を止めるため、『False』に しているためです。 何度かやってみたんですが、これをTrueにしないと空白の枠だけが ペーストされるだけになってしまうので、これを入れています。 本当は画像更新しているところ見せたくないので『True』に したくないのですが。 次に、『For Each』ですがグラフ作成シートには グラフデータから最大値や最小値、平均や中間値などを計算した 結果を出力するためActiveXのコントロールが『26』個程あるので それをループで回して、名前の接頭語で判断して区別しています。 で、あとは教わった方法で強制的に再描画をさせています。 とりあえず、この方法でEXCEL起動後最初の1回目は問題なく 動作するんですがその後連続で同じ処理を実行すると、 『Past』のところで 『RangeクラスのCopyPictureメソッドが失敗しました』や 『処理を続行するにはメモリが不足しています。』 などのエラーが出るか、そのままEXCELがフリーズして処理が 止まります。 一応、1回目は処理が完了するのでいいといえばいいのですが やはり、やり直しなどが発生した場合にいちいちEXCELを 再起動させていたのではシステムとして使いづらいと思うので 何とか安定して2度、3度と処理ができるようにしたいと 思っています。 何か、良い方法はないでしょうか。 乱文、長文になってしまって申し訳ありませんが よろしくお願いします。
|