Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2014, 14:37   #1
4akk
Новичок
Джуниор
 
Регистрация: 27.05.2014
Сообщений: 1
По умолчанию Генератор тестов из Excel в Word

Добрый день.
Нужная помощь с генераторм тестов. Нашел макрос. В Excel создается список вопросов и ответов и макросом переносится в Word. Все отлично получается, но нужно сделать так, чтобы варианты ответов на вопрос брались из разных вопросов. Т.е. чтобы был 1 правильный ответ, а другие всегда разные из других вопросов.

Код макроса
Код:
Sub TestsGenerate()

' макрос генерации тестов в Word-е из Excel-я

' (КубГТУ)

' сделано в Апшеронске

 

Dim test_count As Integer 'количество тестов

Dim quest_count As Integer ' количество вопросов в тесте

Dim max_quest As Integer ' общее количество вопросов на листе

Dim list As String ' название листа в Экселе откуда брать вопросы

 

    Worksheets("AI").Activate ' активируем лист с входными и выходными данными

    ActiveCell.SpecialCells(xlLastCell).Select

    MaxString = ActiveCell.Row

    'Worksheets("0").Cells(2, 1).Value = "x"

    

    

' открываем Word

    Dim WRD

    Set WRD = CreateObject("Word.Application")

    WRD.Visible = True

    WRD.Documents.Open "C:\test.doc" ' Путь к файлу формата Microsoft Word, в который формировать варианты тестов

    

    

    test_count = 24 ' (здесь задаем количество вариантов)

    quest_count = 5 ' (здесь задаем количество вопросов в тесте)

    max_quest = 120 ' (номер максимального номера вопроса (второй столбей))

    sea = 2

    

    Randomize

    

    For i = 0 To test_count Step 1 ' цикл по количеству тестов

         WRD.Selection.Font.Size = 14

         WRD.Selection.Font.Bold = True

         WRD.Selection.TypeText Text:="Вариант  #" + CStr(i)

         WRD.Selection.Font.Bold = wdToggle

         WRD.Selection.TypeParagraph

         WRD.Selection.Font.Size = 12

         ' Ответы в Эксель

         Worksheets("0").Cells(sea, 1).Value = "Вариант " + CStr(i)

         sea = sea + 1

         

        For j = 1 To quest_count Step 1 ' цикл по количеству вопросов в тесте

            num = Int(Rnd * max_quest) + 1

            'MsgBox (num)

            ' цикл по столбцу В, чтобы найти выбранный номер вопроса

            tmp = 0

            For z = 1 To MaxString Step 1

                If (Int(Cells(z, 2).Value) = num) Then

                    'MsgBox (Cells(z, 3).Value)

                    tmp = z

                    Exit For ' вышли, запомнив z

                End If

            Next z

            ' в ыводим в Word, если найден вопрос

            If tmp = 0 Then

               str1 = "Номер вопроса не найден: " + CStr(num)

               MsgBox (str1) ' не найденный номер

            End If

            

            If tmp <> 0 Then

               WRD.Selection.Font.Bold = True

               WRD.Selection.TypeText Text:="Вопрос  #" + CStr(j)

               WRD.Selection.Font.Bold = wdToggle

               WRD.Selection.TypeParagraph

               WRD.Selection.TypeText Text:=Trim(Cells(tmp, 3).Value)

               WRD.Selection.TypeParagraph

               ' теперь цикл по количеству вариантов ответа

               For k = 1 To 4 Step 1 ' дело в том, что количество ответов может быть 2, 3 или 4

                   If (Int(Cells(tmp + k, 2).Value) = 0) Then

                       

                       WRD.Selection.TypeText Text:=Trim(Cells(tmp + k, 4).Value) + ".  " + Trim(Cells(tmp + k, 5).Value)

                       WRD.Selection.TypeParagraph

                       ' Ответы в Эксель

                       If Len(Cells(tmp + k, 1).Value) <> 0 Then

                            Worksheets("0").Cells(sea, 2).Value = j

                            Worksheets("0").Cells(sea, 3).Value = num

                            Worksheets("0").Cells(sea, 4).Value = k

                            sea = sea + 1

                       End If

                   Else

                        Exit For

                   End If

               Next k

               WRD.Selection.TypeParagraph

               

                'WRD.Selection.InsertBreak.WdBreakType.wdSectionBreakNextPage = True

                WRD.Selection.InsertBreak (WdBreakType.wdLineBreak)

            End If

        Next j

        sea = sea + 1

    Next i

 

End Sub
Вложения
Тип файла: rar test.rar (17.5 Кб, 17 просмотров)
4akk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пошаговая инструкция. Создание юнит-тестов (модульных тестов) на Qt C++. Разработка через тестирование (TDD - test-driven developm 8Observer8 Qt и кроссплатформенное программирование С/С++ 15 26.06.2014 09:33
Word в Excel Rmzn Microsoft Office Excel 12 16.01.2014 05:15
перенести документ Word (таблица) в MS Excel c сохранением форматирования или обеспечить всплывающие подсказки в Word Serge_Bliznykov Microsoft Office Word 6 11.07.2011 11:02
Несколько тестов к госэкзамену по Word Wicca Microsoft Office Word 12 19.06.2009 11:52
Простой генератор тестов 0.5 Лунатик222 Софт 4 11.03.2009 23:08