我正在寻找我认为相当简单的代码,但似乎无法弄明白。 实际上,我希望有人将值输入到预定范围的单元格中。 一旦他们完成输入他们的值,我希望他们点击“保存按钮”。 作为验证检查的一部分,我想要做两件事:
到目前为止,我一直在努力训练第一个代码(失败)并且无法通过代码的第二部分进行思考。
Sub ChangeColorNotNumeric()
Dim i As Long
Dim rCell As Range
Dim rRow As Range
Dim rRng As Range
'identify the range to search
Set rRng = Sheet1.Range("Hello")
For i = rRng.Rows.Count To 1 Step 10
'loop through all the cells in the row
For Each rCell In rRng.Rows(i).Cells
If Not IsNumeric(rCell.Value) Then
'delete the row and go to the next one
rCell.Interior.Color = RGB(255, 0, 0)
Exit For
End If
Next rCell
Next i
End Sub
答案 0 :(得分:1)
我认为您可以使用条件格式来执行此操作
首先,选择要格式化的单元格
在条件公式对话框中,选择Use a formula to determine which cell to format
。
然后使用此公式引用您选择的第一个单元格。
=(A1-TRUNC(A1))<>0
这就是假设您正在格式化单元格A1
在满足条件时设置所需的格式,在您的情况下,文本颜色变为红色。
<强>结果:强>
答案 1 :(得分:0)
要使用VBA而不是条件格式,您的示例很容易完成。当重新调用该函数时(当最终用户再次按下“保存”按钮时),该函数将恢复所有现在正确的单元格的黑色字体/透明单元格颜色。
你的循环也有不正确的步数值。我也删除了Exit For,因为我认为你会希望一行中所有列中的所有不正确的值都显示为坏,而不是仅仅是第一列是坏的。您没有表明负数是否可以接受。如果负数是可接受的,那么你应该检查VBA的Int和Fix函数之间的区别;它们都截断了小数值,但处理的负数与另一个略有不同。
您使用的是Excel VBA调试器吗?只是使用调试器会让你觉得第一个For语句总是退出而不是循环,因为Step值不是负数。
Public Sub ChangeColorNotNumeric()
Dim i As Long
Dim rCell As Range
Dim rRow As Range
Dim rRng As Range
'identify the range to search
Set rRng = Sheet1.Range("Hello")
For i = rRng.Rows.Count To 1 Step -1
'loop through all the cells in the row
For Each rCell In rRng.Rows(i).Cells
If Not IsNumeric(rCell.Value) Then
rCell.Interior.Color = RGB(255, 0, 0)
ElseIf rCell.Value <> Int(rCell.Value) Then
rCell.Font.Color = RGB(255, 0, 0)
Else
rCell.Interior.ColorIndex = xlNone
rCell.Font.Color = RGB(0, 0, 0)
End If
Next rCell
Next i
End Sub
答案 2 :(得分:0)
使用数据验证确保您只允许整数。他们无法输入十进制数字。