【问题标题】:VBA Validate that if one cell in a range has a value, all cells should have a valueVBA验证如果一个范围内的一个单元格有一个值,所有的单元格都应该有一个值
【发布时间】:2014-09-05 21:36:26
【问题描述】:

我有一个电子表格,用户将在其中从 A 到 D 列中输入数据。我想在消息框中标识范围 (Ai:Di) 不是完全空白或完全填充的任何行 (i)。用户可以填充的总范围是 A2:D501。

如果没有识别出任何行,宏应继续执行我已经编写的下一段代码,然后继续保存工作簿。

一个转折 - C 列预先填充了 =IF(A2"",TODAY(),"")。因此,C 永远不会真正为空白。宏需要将上述公式视为空白,这样如果一行仅在 C 列中有该公式,则不会计算在内。

感谢您的帮助,我是新手!

【问题讨论】:

  • 用户是否应该在 C 列输入任何内容?或者假设它总是包含该公式是否安全?

标签: vba validation loops if-statement


【解决方案1】:

类似的东西

Function Validate() as boolean
Dim WB as WorkBook
Dim WS as Worksheet
Dim CellA as Range
Dim CellB as Range
Dim CellC as Range
Dim CellD as Range
Dim RowNum as integer
Dim ErrorCnt as integer
Dim ErrorList as String
dim ValueCount as integer
set WB  = ThisWorkBook
Set WS = WB.Worksheets("SheetName")
ErrorCnt = 0
ErrorList = ""
For RowNum  = 2 to 501
    Set CellA = ws.Cells(RowNum, 1)
    Set CellB = ws.Cells(RowNum, 2)
    Set CellC = ws.Cells(RowNum, 3)
    Set CellD = ws.Cells(RowNum, 4)
    ValueCount  = 0
    If CellA.Value <> "" Then ValueCount = ValueCount +1
    If CellB.Value <> "" Then ValueCount = ValueCount +1
    If CellD.Value <> "" Then ValueCount = ValueCount +1
    If (ValueCount  >0 and ValueCount   <3) then 
        ErrorCnt = ErrorCnt +1
        If ErrorCnt = 1 Then
           ErrorList = Cstr(RowNum)
        Else
           ErrorList = ErrorList  & ", " & Cstr(RowNum)  
        End if
    End if
Next
If ErrorCnt = 0 Then
    Validate = True
ElseIf ErrorCnt = 1 Then
    MSgbox "1 Error on Row " & ErrorList 
    Validate = False
Else
    MSgbox cstr(RowNum) & " Errors on Rows " & ErrorList 
    Validate = False
End If
End Function

您还可以使用其他函数来进一步验证,例如,如果只有数字对 D 列有效,则将该行替换为

If isnumeric(CellD.Value) Then ValueCount = ValueCount +1

【讨论】:

  • 不错的代码。似乎是为了在该行之后添加一行 --> MsgBox "Incomplete Data in Row " &amp; RowNum --> If (ValueCount &gt;0 and ValueCount &lt;3) then 以便用户知道哪一行缺少数据。
  • Clif - 这可能是合适的。我可能已经建立了一个行列表以在消息框中报告,以防万一有多个无效行,但我认为这个问题实际上是关于如何循环选择单元格而不是如何处理消息,所以我保持简单。
  • 汤姆——这太完美了!您能否将其集成,以便消息框显示哪些行导致函数返回 false?非常感谢您的帮助!
  • 我添加了一个数字变量来记录错误的数量,并添加了一个字符串来构建它们的列表,然后您可以根据是否没有错误来选择如何处理结果,一个或多个错误...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 2020-03-09
  • 2019-02-08
相关资源
最近更新 更多