2017-07-27 158 views
2

我寫了一個用戶定義函數來獲取單元格的顏色。Excel宏創建公式工作正常。宏複製和粘貼公式葉#Values

Function GetFillColor(Rng As Range) As Long 
    GetFillColor = Rng.Interior.ColorIndex 
End Function 

該函數的工作原理。

我寫了一個宏使用的功能上的電子表格:

Sub Macro5() 

    Macro5 Macro     
     Windows("KobeCurrent2.xlsm").Activate 
     Sheets("Direct").Select 
     Range("AP2").Select 
     ActiveCell.FormulaR1C1 = "=NUMBERVALUE(GetFillColor(RC[-26]))" 
     Range("AP2").Select 
     Dim LR As Long 
    LR = ActiveSheet.UsedRange.Rows.Count 
    Range("AP2").Select 
    Range("AP2").AutoFill Destination:=Range("AP2:AP" & LR) 

End Sub 

細胞AP2示出了單元格的顏色的值。 AP列中的其餘單元顯示#Value! 直到我雙擊#Value!,然後它變成單元格顏色的值。

我試圖乘以1,使用數據文本到列,但通過Excel宏執行時,我仍然得到#Value!它仍然需要雙擊才能解決。

任何幫助,將不勝感激。謝謝。

+0

您必須小心使用依賴於範圍的非值方面的UDF。特別是,在這裏,您可能只需要強制重新計算以獲得更新。這很容易用CTRL + ALT + F9來完成,它將更新所有的單元格。通常,Excel VBA交互不支持在發生非值更改時更新引用。因此,更新單元格顏色,該公式不會針對相關單元格啓動,因爲Excel不會將其作爲更改進行計數。爲了處理這個問題,你通常將UDF標記爲Application.Volatile作爲UDF的第一行。 –

回答

1

我測試了你的腳本,但是我得到了#NAME錯誤,所以我修改了它以將值放在AP2等中,而不是公式。這可能不是你要找的,但很容易修改。希望這有助於或讓你朝着正確的方向前進。

Sub Macro5() ' ' Macro5 Macro ' 

Dim LR As Long 
LR = ActiveSheet.UsedRange.Rows.Count 


Windows("KobeCurrent2.xlsm").Activate 

For x = 2 To LR Step 1 

    Range("AP" & x).Value = Range("A" & x).Interior.ColorIndex 

Next x 
' I left these in here for reference. 
'ActiveCell.FormulaR1C1 = "=GetFillColor(RC[-15])"  
'Range("P2").AutoFill Destination:=Range("P2:P" & LR) 
End Sub 
+0

這當然解決了將ColorIndex變成單元格的問題,但並不能解釋爲什麼UDF最初失敗。 –

+0

@Byron Wall你確實是對的,爲什麼它失敗了,超出了我的理解範圍,所以我只是側面提出了一個「可行」解決方案的問題。我相信大多數優秀的程序員會把它稱爲「黑客」。有罪如充電:) – Mitch