2

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

  • 在单元格 M2 时,检查同一行中列 M 之前的所有单元格的内容
  • 如果同一行中列 M 之前的任何单元格为空,则不允许用户在单元格 M2 中输入任何值。而是向用户发送有关空数据的消息。
  • 在缺失数据的单元格 N2 中创建报告(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

感谢您提前回复...

4

2 回答 2

1

这样的事情会

  1. A2:L2在何时M2更改时测试空白(真正的空白)
  2. 关闭Events,以避免在N2使用时重新加载代码
  3. 将这些有问题的单元格范围转储到N12是否有空白

代码

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
于 2012-11-08T03:49:53.173 回答
1

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

=counta(A2:L2)=12

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

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

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

于 2012-11-08T04:02:55.473 回答