【问题标题】:Excel validate data based on if row has valueExcel 根据行是否具有值来验证数据
【发布时间】:2022-01-11 04:14:23
【问题描述】:

当用户单击按钮时,我希望能够根据 C4:C 列中是否存在值(可以是字母或数字,接受任何内容)来显示空字段的位置。代码应一直填写到该行的 DD 列。如果 C 列中没有值,则不应填充任何颜色(例如,C6 中的值且 C7 中没有值然后停止;或 c8 中的值在 C9 中没有值且 C10 中的值则不触发 C9。)基于C 列 如果沿该行有空字段,则沿该行用黄色填充框,直到 DD 列(例如,C10 中的值应突出显示 D10 和 E10,而不突出显示 F10 并突出显示 G10 和 H10)。一旦用户再次单击按钮时在黄色字段中输入了一个值,它应该删除黄色填充并返回无颜色。 Photo for Refernce

我能想到我的解决方案的唯一方法是使用 VBA,因为我正在使用一个按钮,我不太擅长使用 VBA,并且最近才开始使用它,因此我们将不胜感激任何帮助。

到目前为止我尝试过的以下代码(仅在单击时在选定的单元格上激活):

Public Sub CommandButton1_Click()
    
    Dim rng As Range 
    
    Set rng = Selection
    
    For Each cell in rng 
        If cell.Text = "" Then 
            cell.Interior.Color = vbYellow 
        Else 
            cell.Interior.Color = xlNone 
        End If 
    Next 
    
    Reset 
    
End Sub

【问题讨论】:

  • 为什么不使用条件格式?如果您提供工作表的屏幕截图来显示您想要实现的目标(手动为单元格着色),也许会有所帮助

标签: excel vba validation


【解决方案1】:

这样的事情应该可以工作:

Public Sub CommandButton1_Click()
    
    Dim rng As Range, ws As Worksheet, cell As Range
    
    Set ws = ActiveSheet
    Set rng = ws.Range("C4:C" & ws.Cells(ws.Rows.Count, "C").End(xlUp).Row)
    
    For Each cell In rng.Cells
        With cell.Resize(1, 106).Interior 'from C to DD
            If Len(cell.Value) = 0 Then
                .Color = vbYellow
            Else
                .ColorIndex = xlNone '.ColorIndex not .Color
            End If
        End With
    Next
    
    Reset
    
End Sub

【讨论】:

  • 非常感谢此代码有效,但是,如果其上方或下方没有值,则它不会突出显示单元格。例如在单元格 C14 中它突出显示黄色并且在 C15 中有值它没有突出显示哪个是正确的,但是,在 C16 中没有值并且它没有突出显示该行。还有一种方法可以突出显示其他行,即使 C 列中有一个值,以检查该行是否有输入直到 DD 列,例如C20 中的值,但 E20 中没有值,所以突出显示 E20 黄色?
  • 我正在使用逻辑 (1) 循环遍历从 C4 到 ColC 中最后一个占用的单元格的所有单元格 (2) 如果 ColC 中的单元格有值,则突出显示该行到 ColDD (3 ) 如果单元格有值,则删除任何突出显示。如果您可以添加显示一些示例数据和预期结果的屏幕截图将会很有用:我没有关注您上面的评论。
猜你喜欢
  • 2017-10-16
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-29
  • 2022-08-15
相关资源
最近更新 更多