Мне нужно создать шаблон листа вопроса в Excel, каждый вопрос имеет четыре различных типа ответа, например
"Yes/No",
"Ture/False",
"Multiple Choice/Single Answer",
"Multiple Choice/Multiple Answer".
, если пользователь выберет "Yes/No"
и попытается ответить более чем на два ответа, он появитсясообщение об ошибке.если пользователь выберет "Multiple Choice/Multiple Answer"
и выберет только один ответ и переместится в другую ячейку или столбец, появится всплывающее сообщение об ошибке ... и т. д. для других типов вопросов.
Я использую программирование на основе событий дляДля этого используйте процедуру SelectionChange для рабочего листа. Мой код работает нормально, но он не динамический, он работает только для одного вопроса, в то время как в моем шаблоне 100 вопросов.
В этом шаблоне используются четыре столбца Column A, B, C and D
имя соответственно "Sr.No."
Номер вопроса - это упоминание, "Question
" Вопрос в этом столбце, "Answer Type"
Тип ответа - это упоминание здесь, в раскрывающемся списке. Пользователю "Правильный вариант" нужно выбрать значение Истина отсюда.для правильного варианта.
Мой код здесь:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' section 1
' for Multiple Choice/Multiple answer
' if user select less than 2 answer
rw = 9
rng1 = rw + 1
rng2 = rw + 4
If Worksheets("Question paper").Range("C" & rw).Value = "Mutilple Choice/ Mutiple Answer" And _
WorksheetFunction.CountIf(Range("D" & rng1 & ":" & "D" & rng2), "TRUE") < 2 Then
MsgBox "Select at least 2 ""TRUE"" option"
' for Multiple Choice/Single Answer
' if user select more than 1 answer
ElseIf Worksheets("Question paper").Range("C" & rw).Value = "Mutilple Choice/Single Answer" And _
WorksheetFunction.CountIf(Range("D" & rng1 & ":" & "D" & rng2), "TRUE") > 1 Then
MsgBox "Select only 1 ""TRUE"" option"
' if user doesn't select any answer
ElseIf Worksheets("Question paper").Range("C" & rw).Value = "Mutilple Choice/Single Answer" And _
WorksheetFunction.CountIf(Range("D" & rng1 & ":" & "D" & rng2), "TRUE") < 1 Then
MsgBox "Select only 1 ""TRUE"" option"
' for Yes/No Answer
' if user select more than 1 answer
ElseIf Worksheets("Question paper").Range("C" & rw).Value = "Yes/No" And _
WorksheetFunction.CountIf(Range("D" & rng1 & ":" & "D" & rng2), "TRUE") > 1 Then
MsgBox "Select only 1 ""TRUE"" option"
' if user doesn't select any answer
ElseIf Worksheets("Question paper").Range("C" & rw).Value = "Yes/No" And _
WorksheetFunction.CountIf(Range("D" & rng1 & ":" & "D" & rng2), "TRUE") < 1 Then
MsgBox "Select at least 1 ""TRUE"" option"
' for True/False Answer
' if user select more than 1 answer
ElseIf Worksheets("Question paper").Range("C" & rw).Value = "True/False" And _
WorksheetFunction.CountIf(Range("D" & rng1 & ":" & "D" & rng2), "TRUE") > 1 Then
MsgBox "Select only 1 ""TRUE"" option"
' if user doesn't select any answer
ElseIf Worksheets("Question paper").Range("C" & rw).Value = "True/False" And _
WorksheetFunction.CountIf(Range("D" & rng1 & ":" & "D" & rng2), "TRUE") < 1 Then
MsgBox "Select at least 1 ""TRUE"" option"
' for Free Form(Essay) answer
ElseIf Worksheets("Question paper").Range("C" & rw).Value = "Free Form(Essay)" And _
WorksheetFunction.CountIf(Range("D" & rng1 & ":" & "D" & rng2), "TRUE") > 0 Then
MsgBox "Do not select any option,it is a free form question"
'ElseIf Worksheets("Question paper").Range("C" & rw).Value = "Free Form(Essay)" And _
' Worksheets("Main Sheet").Range("C32") = "" Then
' MsgBox "Please fill details in cell C32 in ""Main Sheet"" tab"
End If
End Sub
В моем текущем коде, это просто работает для одного вопроса, чтобы реализовать его для других 99 вопросов, я должен скопироватьвставьте один и тот же код 99 раз, назначив переменную для номера строки вопроса.
Я ожидаю динамический код для 100 или более вопросов.