2016-04-03 46 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

除其他事項外,請參閱[UDF在任何地方都返回相同的值](http://stackoverflow.com/questions/35910683/udf-returns-the-same-value-everywhere/35956748#35956748),原因是不使用[ActiveCell屬性](https://msdn.microsoft.com/en-us/library/office/ff193314.aspx)。 – Jeeped

回答

0

正如評論所說,UDF是一個函數,它必須返回一個有效的單元格值。返回一個對象或做任何對象操作都會導致錯誤。

您可以通過拆分兩個任務輕鬆解決您的問題:首先,像以前一樣擁有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輸入到單元格中,而不是計算公式結果的一部分。

Private Sub Worksheet_Change(ByVal Target As Range) 
    'Only change cells holding our formula and avoid case sensitiveness. 
    If LCase(Left(Target.formula, 12)) = "=assigncolor" Then 
     Target.Interior.Color = RGB(r, g, b) 
    End If 
End Sub 

希望這會有所幫助。

相關問題