2016-04-03 9 views
0

アクティブセルの塗りつぶし色を他の3つのセルの整数値に基づいて割り当てようとしています。これは私の関数です:ExcelでVBAを割り当てるセルの塗りつぶし色を割り当てる#Value

Function AssignColor(r As Integer, g As Integer, b As Integer) 
    ActiveCell.Interior.color = RGB(r, g, b) 
    AssignColor = "#" & Application.WorksheetFunction.Dec2Hex(RGB(r, g, b)) 
End Function 

この関数を使うと、アクティブなセルに "#Value"という結果が得られ、塗りつぶしの色は設定されません。セルの内部色を割り当てようとすると、このエラーが発生するようです。

これは、塗りつぶしの色を割り当てない理由は何か。ご協力いただきありがとうございます。

+3

VBA UDF(ユーザー定義関数)は、ワークシートのセルで使用される関数で、セルのプロパティを変更することはできません。値を返すことしかできません。だからこのアプローチは終わりです。 –

+0

とりわけ[ActiveCellを使用しない理由で[UDFはどこでも同じ値を返します](http://stackoverflow.com/questions/35910683/udf-returns-the-same-value-everywhere/35956748#35956748)を参照してください。プロパティ](https://msdn.microsoft.com/en-us/library/office/ff193314.aspx)を参照してください。 – Jeeped

答えて

0

コメントの中で述べたように、UDFは有効なセル値を返さなければならない関数です。オブジェクトを返すか、オブジェクト操作を行うと、エラーが発生します。

2つのタスクを分割することで、簡単に問題を解決できます。 まず、以前と同じようにUDFを作成して、塗りつぶし部分を削除します。 代わりに、内の関数に渡されたローカルなものを保存するためにパブリック変数を使用します。次は、ワークシートのモジュールでは、ワークシートの変更イベントにフック

Public r As Integer 
Public g As Integer 
Public b As Integer 

Public Function AssignColor(r1 As Integer, g1 As Integer, b1 As Integer) As String 
    r = r1 
    g = g1 
    b = b1 
    AssignColor = "#" & Application.WorksheetFunction.Dec2Hex(RGB(r, g, b)) 
End Function 

とUDF後の色の操作を行うには、パブリック変数を使用解雇されました。この方法で、制限を回避できます。色付けは、式結果の計算の一部としてではなく、そのUDFをセルに入力した人に応じて行われることに注意してください。

希望します。

関連する問題