如果用户窗体中出现“错误”,请取消任务

时间:2019-01-02 19:13:50

标签: excel vba

我有一个用户窗体“ 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

1 个答案:

答案 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,然后将其保留下来。