2017-01-30 66 views
1

我創建配方功能,看起來像這樣從自定義公式

Function CalculateCPOTracker(Model As String, Mcodes As String, Opt As String, RegionId As String, RecTotalAvailNFormat As String, RecTotalAvailValue As String, GroupModel As String, MandateFormat As String, MandateValue As String, RowNumber As String) As Double 
..... 
CalculateCPOTracker = buffer 

End Function 

在這個函數中,我需要更改單元格的背景顏色的結束更改單元格的背景顏色。我試圖做這樣的事情

Worksheets("Rec").Range("BA:BA").Rows(38).Interior.Color = RGB(255, 255, 0) 

但它不適用於我。它停止正確計算。 從公式函數中可以做到這一點嗎?

+1

不,從工作表中調用的函數不能直接更改單元格的屬性。 –

+0

謝謝。它爲我節省了很多時間。 – mojo

回答

1

嘗試這樣的:

Worksheets("Rec").cells(52,38).interior.color = rgb(255,255,0) 

但是從功能改變字體是不是在VBA一個很好的做法。 Ususally函數應該返回值,並且更改應該由一個子進行。就像這樣:

Public sub ChangeColor (rngCell as range) 
    rngCell.interior.color = rgb(255,255,0) 
end sub 

即使對於顏色可選值:

Option Explicit 

Public Sub ChangeColor(rngCell As Range, _ 
         Optional lngR As Long = 255, _ 
         Optional lngG As Long = 255, _ 
         Optional lngB As Long = 0) 

    rngCell.Interior.Color = RGB(lngR, lngG, lngB) 

End Sub 

編輯: 其實,這取決於你正在嘗試做的: 如果你想使用的功能作爲工作表功能,你不能改變顏色,正如@Scott Craner在評論中提到的那樣。但是,如果您從VBA運行該功能,則可以執行此操作。試試這個小例子來看看區別:

Option Explicit 

Public Function ColorAndBy10(rngMyRange As Range) As Long 

    rngMyRange.Interior.Color = vbRed 
    ColorAndBy10 = 10 * rngMyRange.Value 

End Function 


Public Sub TestMe() 

    Range("b1").Formula = "=ColorAndBy10(A1)" 
    Range("b2") = ColorAndBy10(Range("a2")) 

End Sub 


Public Sub TestMe() 

    Range("b1").Formula = "=ColorAndBy10(A1)" 
    Range("b2") = ColorAndBy10(Range("a2")) 

End Sub 
+0

它創建了一個循環引用,這就是爲什麼它不適合我以及我的方法。我不確定是否可以像我想要的那樣改變細胞顏色。因爲我正在改變計算的同一個單元格。 – mojo

+1

因此,根據你的例子和@Scott Craner評論,不幸的是我不能這樣做。非常感謝您的回覆。 – mojo

+0

歡迎。通過工作表公式似乎不可能改變字體顏色。 – Vityata