我有一个用户窗体“ AMForm”,供学生选择高中课程。
每个班级都有相邻的选项按钮,如果他们想注册班级,可以选择“是”或“否”,例如旁边带有“是”或“否”选项按钮的“机械工程”。
一旦他们提交了表格,我就会在电子表格“ AMChoices”上记录选择。该电子表格在上面的标题中具有每个类别,因此如果已选择“ x”,则它将用“ x”填充单元格。如果选择了“机械工程”选项按钮,则会在该单元格下方填充“ x”。
由于电子表格将容纳许多用户,因此它会填充到下一个空行以记录每个条目。
用户窗体具有一些限制,例如不能一起选择特定的类。我有错误消息,但是当他们单击“提交”按钮时,即使有错误,也会记录选择。
在选择被接受之前,如何取消选择?
在我的代码中,“ optAMIB1”是指“机械工程”的“是”选项按钮。有很多类,因此在我的表单中有几个这样的代码,但是为了简单起见,我只写了一个。其次,“ txtAMS1”是指一个文本框,该文本框会自动更新为所选选项的总信用,例如,机甲工程学分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
答案 0 :(得分:1)
也许并不理想,但过去曾经救过我...在每个msbox行之后,写一个新行:
err = 1
然后在将数据推送到工作表之前:
if err = 0 then
'push data to the spreadsheet
unload me
else
'nothing
end if
在过去,我有很多单独的开关或语句来利用数据/按钮,因此我曾利用它来防止数据提交。
请注意,您需要为选项显式模块定义err。固有地,当Dim err设为Long时,err = 0,尽管您可能希望在开始其余子例程之前指定err = 0。
这应该允许您从不同的支票中取出所有msgbox,然后将其保留下来。