重新计算改变细胞背景

时间:2016-06-03 16:21:57

标签: excel vba excel-formula user-defined-functions

我有一个UDF与一个IF语句结合使用“X”在具有背景颜色的单元格上,当我更改背景颜色时,公式不会重新计算我如何使用Private Sub Workbook_SheetChange以便每个时间我改变细胞背景颜色所有公式重新计算。

公式很简单=IF(CELLCOLOR(M2)="Custom color or no fill","","x"

这是UDF

Function CELLCOLOR(rCell As Range, Optional ColorName As Boolean)
Application.Volatile
Dim strColor As String
Dim iIndexNum As Integer

Select Case rCell.Interior.ColorIndex

Case 1

strColor = "Black"

iIndexNum = 1

Case 53

strColor = "Brown"

iIndexNum = 53

Case 52

strColor = "Olive Green"

iIndexNum = 52

Case 51

strColor = "Dark Green"

iIndexNum = 51

Case 49

strColor = "Dark Teal"

iIndexNum = 49

Case 11

strColor = "Dark Blue"

iIndexNum = 11

Case 55

strColor = "Indigo"

iIndexNum = 55

Case 56

strColor = "Gray-80%"

iIndexNum = 56

Case 9

strColor = "Dark Red"

iIndexNum = 9

Case 46

strColor = "Orange"

iIndexNum = 46

Case 12

strColor = "Dark Yellow"

iIndexNum = 12

Case 10

strColor = "Green"

iIndexNum = 10

Case 14

strColor = "Teal"

iIndexNum = 14

Case 5

strColor = "Blue"

iIndexNum = 5

Case 47

strColor = "Blue-Gray"

iIndexNum = 47

Case 16

strColor = "Gray-50%"

iIndexNum = 16

Case 3

strColor = "Red"

iIndexNum = 3

Case 45

strColor = "Light Orange"

iIndexNum = 45

Case 43

strColor = "Lime"

iIndexNum = 43

Case 50

strColor = "Sea Green"

iIndexNum = 50

Case 42

strColor = "Aqua"

iIndexNum = 42

Case 41

strColor = "Light Blue"

iIndexNum = 41

Case 13

strColor = "Violet"

iIndexNum = 13

Case 48

strColor = "Gray-40%"

iIndexNum = 48

Case 7

strColor = "Pink"

iIndexNum = 7

Case 44

strColor = "Gold"

iIndexNum = 44

Case 6

strColor = "Yellow"

iIndexNum = 6

Case 4

strColor = "Bright Green"

iIndexNum = 4

Case 8

strColor = "Turqoise"

iIndexNum = 8

Case 33

strColor = "Sky Blue"

iIndexNum = 33

Case 54

strColor = "Plum"

iIndexNum = 54

Case 15

strColor = "Gray-25%"

iIndexNum = 15

Case 38

strColor = "Rose"

iIndexNum = 38

Case 40

strColor = "Tan"

iIndexNum = 40

Case 36

strColor = "Light Yellow"

iIndexNum = 36

Case 35

strColor = "Light Green"

iIndexNum = 35

Case 34

strColor = "Light Turqoise"

iIndexNum = 34

Case 37

strColor = "Pale Blue"

iIndexNum = 37

Case 39

strColor = "Lavendar"

iIndexNum = 39

Case 2

strColor = "White"

iIndexNum = 2

Case Else

strColor = "Custom color or no fill"

End Select



If ColorName = False Or strColor = "Custom color or no fill" Then

CELLCOLOR = strColor

Else

CELLCOLOR = iIndexNum

End If


'All credits go to the dude who wrote this code which I'm not
End Function

1 个答案:

答案 0 :(得分:1)

此代码进入sheeet代码模块(不在常规模块中)

编辑" A1:D50"覆盖包含细胞颜色UDF的范围

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Me.Range("A1:D50").Calculate
End Sub