2016-03-08 55 views
0
Function CountColor(rColor As Range, rSumRange As Range) 
    Dim rCell As Range 
    Dim iCol As Integer 
    Dim vResult As Integer 
    iCol = rColor.Interior.ColorIndex 

    For Each rCell In rSumRange 
     If rCell.Interior.ColorIndex = iCol Then 
      vResult = 1 
     Else 
      vResult = 0 
     End If 
    Next rCell  
    CountColor = vResult 
End Function 

我試着鍵入"=CountColor(A1, A2)",但我總是得到錯誤"Sub or function not defined"這是爲什麼?我一直堅持這幾個小時。功能:錯誤Sub或函數未定義

+4

這是在工作簿模塊還是工作表模塊?如果我放置在工作簿模塊中,它適用於我。 – BruceWayne

+1

我認爲這是重複的:http://stackoverflow.com/questions/12351339/cant-use-vba-functions-in-a-spreadsheet-formula-in-excel-2010 – bernie

+1

對不起,有什麼區別他們倆?我通過右鍵單擊項目並創建一個新模塊來插入一個模塊。 – user3002486

回答

1

我無法重現您遇到的錯誤。

如果您使用代碼,結果將不準確,例如: =CountColor(A1,B1:B20)只會給您1或0的結果,因爲您沒有將結果相加在一起。

如果你只是比較內飾顏色,你並不真的需要使用interior.colorindex,只是interior.color應該工作,所以我改變iCol as string

else在你的if語句不是必需的。

我還在代碼中添加了Application.volatile,所以它會計算表單計算的時間。

Function CountColor(rColor As Range, rSumRange As Range) 
    Dim rCell As Range 
    Dim iCol As String 
    Dim vResult As Integer 

    iCol = rColor.Interior.Color 
    Application.Volatile 

    For Each rCell In rSumRange 
     If rCell.Interior.Color = iCol Then 
      vResult = 1 + vResult 
      '  Else 
      '   vResult = 0 
     End If 
    Next rCell 

    CountColor = vResult 

End Function 
+0

我想APplication.volatile有訣竅嗎?不確定,但一旦我補充說,錯誤停止產生。謝謝! – user3002486

+0

@ user3002486 String是'iCol'的錯誤數據類型。 '.Color'返回數字,將其轉換爲字符串是毫無意義的。最好使用'長' –