有没有人知道如何使用与消息框'确定'按钮相同的方式创建用户表单功能?我会解释一下。
我正在检测电子表格中的列中的错误。找到错误后,会弹出一个消息框,如下所示:
MsgBox“请输入有效数据”
当我选择“确定”时,它会转到列中的下一个错误。这很好,除了消息框是模态的,它冻结了应用程序。我希望用户能够编辑数据,然后转到下一个错误。所以,我设计了一个userform,它可以是非模态的。很好,除了我希望宏前进到下一个错误。如果用户纠正错误,它将执行此操作。如果他们不这样做,它就会停留在那个错误单元格上。
我知道为什么会这样。我的userform'Next'按钮只调用找到第一个错误的宏。但我想知道的是,如果有办法解决这个问题。
错误检查从第19行开始,因为这是用户输入数据的开始位置。
我在这里添加了一个指向电子表格的链接。模块1'NextValidationError'工作正常并继续下一个错误。模块14只是在错误处挂起,直到它被解决。我希望它能够跳过。
有人可以就如何让模块14作为模块1进行建议吗?
答案 0 :(得分:0)
这样的事情:
Dim r_start As Long
Sub CheckNames()
Dim r As Long
'Dim emptyRow As Boolean
If r_start = 0 Then r_start = 19
With ActiveSheet
For r = r_start To 5000
'Checks entire row for data. User may skip rows when entering data.
If WorksheetFunction.CountA(.Range(.Cells(r, 1), .Cells(r, 33))) > 0 Then
If ((.Cells(r, 2) = "") <> (.Cells(r, 3) = "")) Or _
((.Cells(r, 2) = "") = (.Cells(r, 4) = "")) Then
MsgBox "Please fill in First and Last Name or HCO in Row " & r & "."
End If
End If
Next
End With
End Sub
除非我误读了您的代码,否则您可以将两张支票与Or
合并。
当用户完成检查时(如果表单在此之后保持打开状态),您将需要一些方法来重置r_start
。
编辑:这是一个非常基本的例子。 UserForm1有两个按钮 - &#34; Next&#34;和&#34;关闭&#34;
&#34; next&#34;只是:
Private Sub CommandButton1_Click()
ShowErrors
End Sub
在常规模块中:
Dim r_start As Long
'this kicks off the checking process
Sub StartChecking()
r_start = 0
UserForm1.Show vbModeless
ShowErrors
End Sub
'a simple example validation...
Sub ShowErrors()
Dim c As Range, r As Long
If r_start = 0 Then r_start = 9
For r = r_start To 200
With ActiveSheet.Rows(r)
If Not IsNumeric(.Cells(1).Value) Then
UserForm1.lblMsg.Caption = "Cell " & .Cells(1).Address() & " is not numeric!"
r_start = r + 1
Exit Sub
End If
End With
Next r
r_start = 0
UserForm1.lblMsg.Caption = "No more errors"
End Sub