excel - 如果用户窗体中出现“错误”,则取消任务
问题描述
我有一个用户表单“AMForm”供学生选择他们在高中的课程。
每个班级都有相邻的选项按钮,可以选择“是”或“否”,如果他们想参加该课程,例如“机械工程”,旁边有“是”或“否”选项按钮。
一旦他们提交了表格,我就会在电子表格“AMchoices”上记录选择。该电子表格包含上述标题中的每个类,因此如果已选择单元格,则它会用“x”填充单元格,例如,如果选择了“机械工程”选项按钮,则会在该单元格下方填充“x”。
由于电子表格将容纳许多用户,因此它会填充到下一个空行以记录每个条目。
Userform 有一些限制,例如不能一起选择特定的类。我对此有错误消息,但是当他们单击“提交”按钮时,即使有错误,也会记录选择。
在被接受之前,如何取消记录选择?
在我的代码中,“optAMIB1”指的是“机械工程”的“是”选项按钮。有很多类,所以我的表单中有几个这样的代码,但为了简单起见,我只放了一个。其次,“txtAMS1”是指一个文本框,它会根据所选选项的总学分自动更新,例如 Mech Eng 值 20 学分,但他们必须选择足够的课程才能总计 40 学分。
Private Sub btnAMSubmit1_Click()
Dim Total As String
Dim Total2 As String
Dim CurrentCell As Range
Dim AMChoiceSht As Worksheet
Dim LastRow As Long
'Semester 1 Credits
Total = 0
' set the worksheet object
Set AMChoiceSht = ThisWorkbook.Worksheets("AMChoices")
'Choose IB1 Sem 1
With AMChoiceSht
LastRow = .Cells(.Rows.Count, "F").End(xlUp).Row ' find last row in column B
Set CurrentCell = .Range("F" & LastRow + 1) ' set the range of next empty row
End With
If Me.optAMIB1 Then
Total = Total + 20
CurrentCell.Value2 = "X"
End If
If Me.optAMIB1 = False Then
CurrentCell.Value2 = "-"
End If
'add up to 40
If Me.txtAMS1 <> 40 Then
MsgBox "Error. Semester One Credits must be equal to 40."
End If
解决方案
也许不理想,但在过去救了我......在每个 msbox 行之后,写一个新行:
err = 1
然后在将数据推送到工作表之前:
if err = 0 then
'push data to the spreadsheet
unload me
else
'nothing
end if
过去我曾利用它来防止数据提交,我有许多单独的开关或语句来使用数据/按钮。
请注意,您需要为您的选项显式模块定义错误。本质上,err = 0,当 Dim err as Long 时,尽管您可能希望在开始其余子例程之前指定 err = 0。
这应该允许您从不同的检查中取出所有 msgbox,然后保持工作表。
推荐阅读
- android - 关于Android AppWidgets的问题:小部件消失的奇葩案例
- mysql - Mysql 展平一个数组
- javascript - 无法匹配 RESTful Multipart File 参数
- oracle - 如何在逻辑或关系模型中的数据建模器中创建身份主键?
- scala - 是否有适用于字符串标记而不是字符的 Scala 解析解决方案?
- firebase - 在 null 上调用了方法 'collection'。Receiver null 尝试调用:collection("user")
- ruby-on-rails - 遇到这个问题的 Rails Resque
- android - 这段代码根本没有显示请求权限对话框,为什么?
- swift - 同步等待 AVAssetExportSession
- c# - 如何使用 EF Core 将 FeatureCollection 存储到 SQL 中?