首页 > 解决方案 > 如果用户窗体中出现“错误”,则取消任务

问题描述

我有一个用户表单“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

标签: excelvba

解决方案


也许不理想,但在过去救了我......在每个 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,然后保持工作表。


推荐阅读