Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(指定なし : 指定なし)
オブジェクトの色が変わらない
投稿日時: 25/11/17 14:51:53
投稿者: Sofia

つぎのようなコードを作りました。
 
    With ActiveSheet.Shapes("xxx").Fill
        .ForeColor.ObjectThemeColor = msoThemeColorAccent2
        .ForeColor.Brightness = 0.8000000238
    End With
 
(長ーーーい処理)
 
    With ActiveSheet.Shapes("xxx").Fill
        .ForeColor.ObjectThemeColor = msoThemeColorAccent4
        .ForeColor.Brightness = 0.8000000119
    End With
 
上記、長い処理の前後でオブジェクトxxxの色を変えたいのです。
処理のあとの色はでますが、始めの色がうまく出ません。どうしてでしょう。
何かオブジェクト処理のため必要な処理があるのでしょうか。お教え下さい。
 
よろしくお願い致します。

回答
投稿日時: 25/11/17 15:19:07
投稿者: 半平太

Sofia さんの引用:
始めの色がうまく出ません。どうしてでしょう。

エクセルが寝ぼけているか、忙殺されているかもですね。
初めに色設定をした後で、
 Application.ScreenUpdating = True ’目覚まし
 DoEvents
 DoEvents '念押しで2回入れる
で改善されませんか?
 
 
  

回答
投稿日時: 25/11/17 16:15:55
投稿者: Suzu

引用:
上記、長い処理の前後でオブジェクトxxxの色を変えたいのです。
処理のあとの色はでますが、始めの色がうまく出ません。

 
 
処理の「まえ」「あと」とは、
コード実行時の 前の方で実行されるコードと、
       後の方で実行されるコード
と いう意味でしょうか?
 
であるなら、
前半で処理したオブジェクトに対し、
 改めて、どこかで処理を行っているのではありませんか?
 
或いは重なっているとか。
 
 
オブジェクトの数はどのくらいありますか?
数が多い場合、写真や、Shapeは見えなくなったり、意図しない動作になる事があります。
 個人的には、1Sheet 100個以上 は入れない様にします。
 
元々、表計算ソフトであり、Shape 等は おまけ機能 印刷で位置が決まらないとか
セル内の文字がプレビューでは途切れていないのに、印刷を行うと途切れるとかもあります。
 
やるのであれば、なるべく軽い処理になる様にしてみます。
 テーマカラーを変え、明度を変えていますが、
 それらは、RGBで指定すれば、1回の処理で済みませんか?

投稿日時: 25/11/17 16:46:11
投稿者: Sofia

皆様、早々に回答頂き、ありがとうございます。
 
半平太様、
 
DoEvents
を一回までつければ、出るようになりました。
ありがとうございました。
とりあえず解決ですが、結局のところ、何かオブジェクト単位に何かしたい場合、
このようなセットの命令を常に挟む必要があるということでしょか。
それらの命令を入れずに、処理の後の色が変わったのは、もうこれでプログラムは終わるので、
溜めていたものを吐き出したっていう感じですか?

回答
投稿日時: 25/11/17 17:16:47
投稿者: 半平太

>セットの命令
 
うーむ、セットではなく「DoEvents 一つ」が本来の姿なんですが・・
 
オブジェクトのプロパティをセットすることと、
エクセル画面にそれを反映することは別処理であり、
画面反映には DoeventsでWindowsにコントロールを一旦戻す必要があります。
 
じゃ何故 ScreenUpdateとか、Doeventsを2回も書くように回答したのかと言えば、
長年の経験からくる「念の為」と言う奴です。
(実際この冗長なコードでやっと解決したという事もあったんです。いつもじゃないところが厄介な話なんですが)
 
処理の後の色が変わったのは、Windowsにコントロールが戻ったからで、お察しの通りと思います。

トピックに返信