验证内容 - 不允许用户输入 - 提供无效数据报告

时间:2012-11-08 03:01:36

标签: excel-vba vba excel

我正在尝试编写一个程序来执行以下步骤:

  • 在单元格M2处,检查列之前所有单元格的内容 M在同一行
  • 如果同一行中M列之前的任何单元格为空,请执行此操作 不允许用户在单元格M2中输入任何值。 RAther给了一个消息 用户关于空数据。
  • 在缺少数据的第二个单元格中创建一个报告(第一行 excel包含列中的数据标题)

到目前为止遇到的问题: 无限循环 - 我认为当再次触发清除内容循环时会导致此问题

我不确定连接代码是否良好。

以下计划:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$M$2" Then    
MsgBox "1"    
Call MyMacro    
End If    
End Sub


Sub MyMacro()

'If [OR(ISBLANK(A2:L2))] Then
If ISBLANK(A2) Then
MsgBox "2"
Range("N2").Select
ActiveCell.Value = N2.Value + A1.Value
'Range("M2").ClearContents
'MsgBox "3"

'this the message that pops up if any cell in the range is blank
End If

End Sub

感谢您提前回复......

2 个答案:

答案 0 :(得分:1)

这样的事情

  1. A2:L2更改M2时空白(真空)的测试
  2. 关闭Events,以避免在使用N2时重新加载代码
  3. 转储这些违规的单元格区域N12是否有空白
  4. <强>码

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng1 As Range
    If Intersect(Target, Range("M2")) Is Nothing Then Exit Sub
    With Application
    .EnableEvents = False
    On Error Resume Next
    Set rng1 = Range("A2:L2").Cells.SpecialCells(xlBlanks)
    On Error GoTo 0
    If Not rng1 Is Nothing Then
    MsgBox "blank cells in " & rng1.Address(0, 0), vbCritical, "User entry in M2 removed"   
    [n2] = rng1.Address
    [m2].Clear
    End If
    .EnableEvents = True
    End With
    End Sub
    

答案 1 :(得分:1)

另一个不使用宏的选项是在M列中使用数据验证,使用自定义公式

=counta(A2:L2)=12

和自定义错误消息“列A到L中的空白单元格”。

这当然不会给你丢失的单元格,但是你可以使用这个数组公式得到第一个(用ctrl + Shift + enter进入)

=IFERROR(ADDRESS(ROW(),MATCH(TRUE,A2:L2="",0)),"")