Материал: 1035

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
'заголовок ФИО не включается

Worksheets("Группы").Select 'выбор листа "Группы"

n = 0 'количество групп+1(заголовок "Группы")

Do While Cells(n + 1, 1) <> "" n = n + 1

Loop

Set uf = UserForm1 'объект присвоить переменной

For row = 2 To n 'заголовок "Группы" не включается ' Добавление опции (наименование группы)

uf.ComboBox1.AddItem Sheets("Группы").Cells(row, 1)

Next row

 

uf.Label2.Enabled = False

'недоступна Надпись "ФИО"

uf.Label3.Enabled = False

' недоступна Надпись "Раздел"

uf.ComboBox2.Enabled = False 'недоступно Комбинированное поле "ФИО" uf.ComboBox3.Enabled = False 'недоступно Комбинированное поле "Раздел"

uf.Frame1.Enabled = False

'недоступна Рамка "Тестовые задания"

uf.Label4.Enabled = False

'недоступна Надпись "Вопрос"

uf.TextBox1.Enabled = False 'недоступно Текстовое поле "Вопрос"

uf.OptionButton1.Enabled = False 'недоступен Переключатель Ответ 1 uf.OptionButton2.Enabled = False 'недоступен Переключатель Ответ 2 uf.OptionButton3.Enabled = False 'недоступен Переключатель Ответ 3 uf.OptionButton4.Enabled = False 'недоступен Переключатель Ответ 4 uf.CommandButton1.Enabled = False 'недоступна Кнопка "Далее" uf.CommandButton2.Enabled = False 'недоступна Кнопка "Выход" uf.Show ' загрузить Форму UserForm1

End Sub

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

' Выбор Группы и добавление в ComboBox2 опции (ФИО с листа АД-07Д1,...)

Private Sub ComboBox1_Change() Dim row As Integer

' ComboBox1.Value = название листа(наименование группы АД-07Д1,...)

Worksheets(ComboBox1.Value).Select

nfio = 0 'число студентов +1(заголовок ФИО)

Do While Cells(nfio + 1, 1) <> "" nfio = nfio + 1

Loop

For row = 2 To nfio

'Добавление опции

uf.ComboBox2.AddItem Sheets(ComboBox1.Value).Cells(row, 1) Next row

uf.Label2.Enabled = True ' доступна Надпись "ФИО"

'Доступно Комбинированное поле для выбора ФИО

21

uf.ComboBox2.Enabled = True End Sub

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

' Выбор ФИО и добавление в ComboBox3 опции (название раздела с листа "Разделы")

Private Sub ComboBox2_Change() Dim row As Integer, n As Integer Worksheets("Разделы").Select

n = 0 'число тем +1(заголовок "Разделы")

Do While Cells(n + 1, 1) <> "" n = n + 1

Loop

For row = 2 To n 'заголовок "Разделы" не включается ' Добавление опции(номер и наименование раздела)

uf.ComboBox3.AddItem Sheets("Разделы").Cells(row, 1) Next row

uf.Label3.Enabled = True ' доступна Надпись "Раздел"

'Доступно Комбинированное поле для выбора Раздела

uf.ComboBox3.Enabled = True End Sub

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

' Выбор Раздела и вызов Первого вопроса

Private Sub ComboBox3_Change()

uf.Frame1.Enabled = True

'доступна Рамка "Тестовые задания"

uf.Label4.Enabled = True

'доступна Надпись "Вопрос"

uf.TextBox1.Enabled = True 'доступно Текстовое поле для вывода Вопроса

uf.CommandButton2.Enabled = True 'доступна Кнопка "Выход"

NQuestion 'процедура вычисления количества тестовых заданий

uf.Label7.Caption = nQuest 'заданий всего

Question (1) 'процедура вызова вопроса (1-номер строки с вопросом)

uf.Label8.Caption = cQuest 'номер текущего задания

uf.Label1.Enabled = False

'недоступна Надпись "Группы"

uf.Label2.Enabled = False

'недоступна Надпись "ФИО"

uf.Label3.Enabled = False

'недоступна Надпись "Раздел"

'Недоступно Комбинированное поле для выбора Группы

uf.ComboBox1.Enabled = False

'Недоступно Комбинированное поле для выбора ФИО

uf.ComboBox2.Enabled = False

' Недоступно Комбинированное поле для выбора Раздела

uf.ComboBox3.Enabled = False End Sub

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

22

' Подсчет числа правильных ответов и вызов следующего задания

Private Sub CommandButton1_Click() Dim i As Integer

' Подсчет числа правильно выполненных заданий

If uf.OptionButton1.Value = True Then

' +1, если ответ 1 отмечен как верный

nQuestP = nQuestP + Cells((cQuest - 1) * 5 + 2, 1) End If

If uf.OptionButton2.Value = True Then

' +1, если ответ 2 отмечен как верный

nQuestP = nQuestP + Cells((cQuest - 1) * 5 + 3, 1) End If

If uf.OptionButton3.Value = True Then

' +1, если ответ 3 отмечен как верный

nQuestP = nQuestP + Cells((cQuest - 1) * 5 + 4, 1) End If

If uf.OptionButton4.Value = True Then

' +1, если ответ 4 отмечен как верный

nQuestP = nQuestP + Cells((cQuest - 1) * 5 + 5, 1) End If

'Вызов следующего задания

'Если все задания выполнены, то название кнопки "Далее" изменяется на "Завершить"

If CommandButton1.Caption <> "Завершить" Then

iQuest = cQuest * 5 + 1 'номер строки, содержащей очередной вопрос Question (iQuest) 'процедура вызова задания (iQuest-номер строки с вопросом)

Else 'все задания выполнены

uf.TextBox1.Text = " "

uf.Label4.Enabled = False 'недоступна Надпись "Вопрос"

uf.TextBox1.Enabled = False 'недоступно Текстовое поле с Вопросом

uf.OptionButton1.Enabled = False 'недоступен Переключатель Ответ 1 uf.OptionButton2.Enabled = False 'недоступен Переключатель Ответ 2 uf.OptionButton3.Enabled = False 'недоступен Переключатель Ответ 3 uf.OptionButton4.Enabled = False 'недоступен Переключатель Ответ 4 uf.CommandButton1.Enabled = False ' недоступна Кнопка "Завершить" End If

End Sub

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

' Вызов тестового задания

Sub Question(ByVal iRow As Integer)

Dim path_bmp As String, file_bmp As String

' Номер темы = номеру листа

Worksheets(Trim(Str(ComboBox3.ListIndex + 1))).Select

23

If Cells(iRow, 1) <> Trim(" ") Then

'Путь к папке, содержащей графические файлы(Рис1.bmp, Рис2.bmp и т.д.)задания

path_bmp = Trim(Cells(2, 4))

'Полное имя графического файла

file_bmp = path_bmp + "\" + Cells(iRow, 1) If Dir(file_bmp) <> "" Then

uf.Image1.Picture = LoadPicture(path_bmp + "\" + Cells(iRow, 1)) Else

MsgBox ("Нет графического файла " + file_bmp) End If

Else

uf.Image1.Picture = LoadPicture() 'очистка графического поля End If

'Вопрос и ответы

uf.TextBox1.Text = Cells(iRow, 3) 'вопрос uf.OptionButton1.Caption = Cells(iRow + 1, 3) 'ответ 1 uf.OptionButton2.Caption = Cells(iRow + 2, 3) 'ответ 2 uf.OptionButton3.Caption = Cells(iRow + 3, 3) 'ответ 3 uf.OptionButton4.Caption = Cells(iRow + 4, 3) 'ответ 4 uf.OptionButton1.Enabled = True 'доступен Переключатель Ответ 1 uf.OptionButton2.Enabled = True 'доступен Переключатель Ответ 2 uf.OptionButton3.Enabled = True 'доступен Переключатель Ответ 3 uf.OptionButton4.Enabled = True 'доступен Переключатель Ответ 4 uf.OptionButton1.SetFocus 'фокус на Переключателе Ответ 1

'Ответ не выбран

uf.OptionButton1.Value = False ' удаление метки Переключателя Ответ 1 uf.OptionButton2.Value = False ' удаление метки Переключателя Ответ 2 uf.OptionButton3.Value = False 'удаление метки Переключателя Ответ 3 uf.OptionButton4.Value = False ' удаление метки Переключателя Ответ 4 'Недоступна Кнопка "Далее" пока не выбран ответ

uf.CommandButton1.Enabled = False

cQuest = cQuest + 1

'количество выполненных тестовых заданий

uf.Label8.Caption = cQuest 'номер текущего задания

If cQuest = nQuest Then

'если выполняется последнее задание

'Переименование Кнопки "Далее"

uf.CommandButton1.Caption = "Завершить" End If

End Sub

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

'Вычисление количества тестовых заданий

Sub NQuestion()

24

'Номер Раздела = номеру листа

Worksheets(Trim(Str(ComboBox1.ListIndex + 1))).Select

cQuest = 0 'количество выполненных тестовых заданий nQuestP = 0 'количество правильно выполненных тестовых заданий nQuest = 0 'количество тестовых заданий всего

Do While Cells(nQuest + 1, 3) <> "" nQuest = nQuest + 1

Loop

nQuest = nQuest / 5 End Sub

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

' Кнопка "Выход" с сохранением результатов тестирования

Private Sub CommandButton2_Click() Dim row As Integer

Worksheets(ComboBox1.Value).Select 'лист с наименованием группы

'Вывод результатов тестирования в строку с ФИО студента

For row = 1 To nfio

'Если ComboBox2.Text=ФИО

If uf.ComboBox2.Text = Sheets(ComboBox1.Value).Cells(row, 1) Then

Cells(row, 2) = nQuest 'количество тестовых заданий всего Cells(row, 3) = cQuest 'количество выполненных тестовых заданий Cells(row, 4) = nQuestP 'количество правильных ответов Cells(row, 5) = "" ' очистка ячеек с оценкой по шкале 0-100 баллов

Cells(row, 5) = Round(nQuestP / nQuest * 100) 'оценка округляется End If

Next row Unload uf End Sub

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

' Сделать доступной кнопку "Далее" после выбора переключателя Ответ 1

Private Sub OptionButton1_Click() uf.CommandButton1.Enabled = True End Sub

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

'Сделать доступной кнопку "Далее" после выбора переключателя Ответ 2

Private Sub OptionButton2_Click() uf.CommandButton1.Enabled = True End Sub

–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

' Сделать доступной кнопку "Далее" после выбора переключателя Ответ 3

Private Sub OptionButton3_Click()

25