如何让单元格在没有被用户选择过和输入正确数据的情况下保持白色,用户留空和输出错误数据(比如负数)的时候变成红色,调了半天也只能要么一来就变色,要么除了负数都不变色
如图,在工作表按Alt+F11,VBA窗口对应Sheet右边空白输入以下代码
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
For Each Rng In [A1:D2]
If Rng.Address = Target.Address Then Rng.Interior.ColorIndex = 3
If WorksheetFunction.IsText(Rng.Value) Then Rng.Interior.ColorIndex = xlNone
If Rng.Value > 0 Then Rng.Interior.ColorIndex = xlNone
Next
Application.EnableEvents = True
End Sub
'两个事件一起触发效果更好
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
For Each Rng In [A1:D2]
If Rng.Address = Target.Address Then Rng.Interior.ColorIndex = 3
If WorksheetFunction.IsText(Rng.Value) Then Rng.Interior.ColorIndex = xlNone
If Rng.Value > 0 Then Rng.Interior.ColorIndex = xlNone
Next
Application.EnableEvents = True
End Sub
-----------------------------------------------------------
深绿=51,深青=49,深蓝=11,靛蓝=55,
灰色80=56,深红=9,橙色=46,深黄=12,
绿色=10,青色=14,蓝色=5,蓝灰=47,
灰色50=16,红色=3,浅橙色=45,酸橙色=43,
海绿=50,水绿色=42,浅蓝=41,紫罗兰=13,
灰色40=48,粉红=7,金色=44,黄色=6,
鲜绿=4,青绿=8,天蓝=33,梅红=54,
灰色25=15,玫瑰红=38,茶色=40,浅黄=36,
浅绿=35,浅青绿=34,淡蓝=37,淡紫=39,白色=2
数据正确性只要不是留空、大于零就行,颜色是按照哪个顺序改的啊,需要的单元格就用:隔开就行么
追答数据正确性,加入一行大于零判断就行了
Private Sub Worksheet_Selectionchange(ByVal Target As Range)
For Each Rng In [A1:D2]
If Rng.Address = Target.Address Then Rng.Interior.ColorIndex = 3
If WorksheetFunction.IsText(Rng.Value) Then Rng.Interior.ColorIndex = xlNone
If Rng.Value > 0 Then Rng.Interior.ColorIndex = xlNone '加入这行放后面比较好
Next
End Sub
2. 颜色代码如下,你随意
深绿 = 51,深青 = 49,深蓝 = 11,靛蓝 = 55,灰色80 = 56,深红 = 9,橙色 = 46,深黄 = 12,绿色 = 10,青色 = 14,蓝色 = 5,蓝灰 = 47,灰色50 = 16,红色 = 3,浅橙色 = 45,酸橙色 = 43,海绿 = 50,水绿色 = 42,浅蓝 = 41,紫罗兰 = 13,灰色40 = 48,粉红 = 7,金色 = 44,黄色 = 6,鲜绿 = 4,青绿 = 8,天蓝 = 33,梅红 = 54,灰色25 = 15,玫瑰红 = 38,茶色 = 40,浅黄 = 36,浅绿 = 35,浅青绿 = 34,淡蓝 = 37,淡紫 = 39,白色 = 2
你看得到追答吗?重新发一下。
代码加一行就行了,颜色发给你自己选一个
Private Sub Worksheet_Selectionchange(ByVal Target As Range)
For Each Rng In [A1:D2]
If Rng.Address = Target.Address Then Rng.Interior.ColorIndex = 3
If WorksheetFunction.IsText(Rng.Value) Then Rng.Interior.ColorIndex = xlNone
If Rng.Value > 0 Then Rng.Interior.ColorIndex = xlNone
Next
End Sub
----------------------------------------------------------------------------------------
深绿=51,深青=49,深蓝=11,靛蓝=55,灰色80=56,深红=9,橙色=46,
深黄=12,绿色=10,青色=14,蓝色=5,蓝灰=47,灰色50=16,红色=3,浅橙色=45,
酸橙色=43,海绿=50,水绿色=42,浅蓝=41,紫罗兰=13,灰色40=48,粉红=7,金色=44,
黄色=6,鲜绿=4,青绿=8,天蓝=33,梅红=54,灰色25=15,玫瑰红=38,茶色=40,
浅黄=36,浅绿=35,浅青绿=34,淡蓝=37,淡紫=39,白色=2
修改了回答,你直接在回答看吧
修改了回答,你直接在回答看吧
追问大佬,老大突然说不能用宏,这个如果不用宏能达到效果么orz
追答不能用宏只能考虑条件格式,但有一条,条件格式不会判断区别选中单元格后留空,还是本来就留空,你考虑一下
追问大佬你把另一种方法发我一下吧,都做了备着算了
追答先补充回答你上面VBA的问题。
最好把回答里两段代码同时复制到VBA对应的Sheet里。
你的颜色是浅橙色不是红色,对应数值是40。
----------------------------------------------
再回答条件格式的方法:缺点不能判断是否本来就留空
同时选中你要设置的三个区域,比如B1,D1,B2
开始选项卡-》条件格式-》新建条件格式-》使用公式
条件格式公式=OR(B1<0,B1=""),条件格式设置为底色填充浅橙色
如图
就是打开表格的时候默认状态都是白色,但是用户点击单元格后不输入或者输入错误数据后就变红,这个算是输入后判断吧