Отмените задачу, если в пользовательской форме произошла ошибка - PullRequest
0 голосов
/ 02 января 2019

У меня есть пользовательская форма «AMForm», чтобы учащиеся могли выбирать свои классы в старшей школе.

Для каждого класса имеются смежные кнопки для выбора «да» или «нет», если они хотят записаться наНапример, класс «Машиностроение» с опциональными кнопками «да» или «нет».

Как только они отправят свою форму, я записываю варианты в электронную таблицу «AMChoices».Эта электронная таблица имеет каждый класс в указанных выше заголовках, поэтому она заполняет ячейку буквой «х», если она была выбрана, например, если выбрана кнопка «Машиностроение», она заполняет «х» под этой ячейкой.

Какэлектронная таблица будет содержать много пользователей, она заполняет следующую пустую строку для записи каждой записи.

Форма пользователя имеет ограничения, такие как невозможность выбора определенных классов вместе.У меня есть сообщения об ошибках, но когда они нажимают кнопку «отправить», даже если есть ошибки, варианты записываются.

Как я могу отменить выбор, который был записан, до тех пор, пока он не будет принят?

В моем коде «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

1 Ответ

0 голосов
/ 02 января 2019

Может быть, не идеал, но спас меня в прошлом ... После каждой строки msbox напишите новую строку:

err = 1

Затем, перед тем как отправить данные на лист:

if err = 0 then 
    'push data to the spreadsheet
    unload me
else
    'nothing
end if

Я использовал это для предотвращения отправки данных в прошлом, когда у меня было много отдельных переключателей или операторов для использования данных / кнопок.

Обратите внимание, что вам нужно определить err для явного параметрамодуль.По сути, err = 0, когда Dim err as Long, хотя вы можете указать err = 0, прежде чем запускать оставшуюся подпрограмму.

Это должно позволить вам вывести все msgbox из разных проверок, затемдержать лист вверх.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...