2

いくつかのMSForms.Labelコントロールを含むExcel2003のユーザーフォームがあります。これらの各コントロールの.BackColorプロパティを、ワークシート上のいくつかの個々のセルの色と一致するように設定したいと思います。

これを行うには、これらのセルの.Interior.Colorプロパティを読み取り、それを16進数に変換し、その値を使用してLabelオブジェクトの.BackColorプロパティを設定します。

私の問題は、.Interior.Colorから出力される値が、最初に読み取られたときにほとんどの場合正しくないことです。VBAエディターのイミディエイトウィンドウで次のコマンドを実行して、これをテストしました。

Print Hex([sourceCell].Interior.Color)

このコマンドは、ほとんどの場合、最初のラウンドでは間違った値を示しますが、2回目以降は正しい値を示します。[sourceCell]の塗りつぶしの色を変更してコマンドを再実行すると、同じことが行われます。つまり、最初は間違った値、2回目以降は正しい値になります。

問題のセルはすべて、折れ線グラフの色で塗りつぶされます/色の選択を塗りつぶします(つまり、Excelの[セルの書式設定]ダイアログの[パターン]タブに表示される下の2行)。これらの色は、カスタムの色のセットを提供するために私によって変更されました。言うまでもなく、「間違った」値は、カスタマイズされた色の選択範囲に対するExcelのデフォルト(つまり、開始時に取得するデフォルトのグラフの線/塗りつぶしの色)と一致するようです。新しいワークブック)。

他の誰かがこの動作を経験した/回避策がありますか?実行時に値を2回読み取ろうとすると、機能しません。つまり、正しい値に切り替わりません。「正しい」値を強制的に出力するには、コードを停止してユーザーフォームを再ロードする必要があります。

4

2 に答える 2

0

Application.OnTimeを介したクラッジ/回避策。

ユーザーフォームの準備コードを実行して、ユーザーフォームを非表示にしてラベルオブジェクトの背景色を設定し、メインコードを即時のOnTimeイベントから実行するように設定すると(準備コードをOnTimeの一部として再実行するようにしてください)、次のことができます。フォームを表示するときに、Excelに正しい「2回目のラウンド」値を与えるように強制します。

于 2013-01-25T17:03:54.070 に答える
0

これは私のために働きます:

MyForm.MyControl.BackColor = Range(myrange).Interior.Color

.Interior.Colorサンプリングされた範囲のRGBを含むバリアントを返します。

.Interior.ColorIndex.ColorIndexおそらくExcel2003の色の制限に特有の理由で、常に-4140または何か奇妙なものを返します。

于 2016-08-06T18:08:15.227 に答える