Страницы: 1
RSS
VBA. Подтягивать полученный ранее результат в одном макросе в другой макрос
 
Добрый день, подскажите где ошибка?

Суть Test'а, перед тем как приступить к заполнению ответов, у студента запрашивалась фамилия, после того как тест будет закончен - у студента необходимо уточнить его ли фамилия (из ранее полученных результатов), если студент ответит "да" - то программа выдаст ему его результат.

Код
Sub ВвестиФамилию()

 Dim VarX As Variant
VarX = InputBox("Напиши свою фамилию ")

  
End Sub


Sub ПроверитьФамилию()

      Dim XXX As String, VarMsg
      XXX = ВвестиФамилию()
      Dim VarX As Variant, VarMsg
VarX = InputBox("Напиши свою фамилию ")
Метка:  VarMsg = MsgBox("Твоя фамилия " & VarX & _
  vbNewLine & "Правильно ?", vbQuestion + vbYesNo)
  If VarMsg = vbNo Then MsgBox "Будь внимательнее": GoTo Метка
  

Далее я собираю все ранее написанные макросы в один (на данном примере 2 макроса)
Код
Sub StartTest()
Application.ScreenUpdating = False
ВвестиФамилию
СнятьЗащитуТест
ПоказатьВопросы
НовыеВопросы
СкрытьВопросы
ЗащитаТестСтарт
Application.ScreenUpdating = True
Application.OnTime Now + TimeValue("0:0:15"), "EndTest"

End Sub


Sub EndTest()
Application.ScreenUpdating = False
ПроверитьФамилию
СнятьЗащитуТест
ПоказатьВопросы
СнятьЗащитуАрхив
ВыдатьБалл
В_Архив
СкрытьВопросы
ЗащитаАрхив
ЗащитаТестФиниш
Application.ScreenUpdating = True

End Sub
 
Фамилия присваивается в переменную, которая внутри макроса. В другом макросе ее нет.
Нужно задать глобальную переменную в верхней строке и использовать ее для проверки.

Грубо вот так:
Код
Dim XXX As String
Option Explicit

Sub ВвестиФамилию()
    XXX = InputBox("Введите фамилию")
  
End Sub


Sub ПроверитьФамилию()

      Dim VarX As Variant, VarMsg
Метка:  VarMsg = MsgBox("Твоя фамилия " & XXX & _
  vbNewLine & "Правильно ?", vbQuestion + vbYesNo)
  If VarMsg = vbNo Then MsgBox "Будь внимательнее": GoTo Метка
  
End Sub
Изменено: mistergam - 12.10.2019 15:36:49 (добавил код)
 
mistergam, выдает ошибку  
Изменено: AnastasiaSchaste - 12.10.2019 16:50:25 (добавила фотографию )
 
AnastasiaSchaste, Option Explicit должно быть первой строкой модуля, но уж никак не процедуры.
 
Апострофф,вот я тупанула! спасибо!

mistergam, попробовала еще раз. Но все равно показывает не как я бы хотела.

Он дважды запрашивает написать Фамилию, а необходимо чтобы он запрашивал в начале теста, а в конце уточнял - эта ли фамилия  
 
Имя Вы так и не вынесли в глобальную переменную. Естественно, сравнивать не с чем... Зачем задержка 15 сек?
Ввел все заведомо неправильные ответы, тест мне выдал 40 баллов! За труды? :)

Пробежался, немного упростил. Не логику, только лишнее убрал. Не разбирался, зачем эти пароли-распароли, показать-скрыть...
Скрытый текст
 
vikttur, попробовала заменить на Ваш код - выдал ошибку...

Цитата
vikttur написал: Зачем задержка 15 сек?
Это было задание такое ( на курсах )
 
Опять те же грабли! Вы перенную уровня модуля объявили? Посмотрите в моем сообщениии под спойлером, вторая строка. Да и в файле то же самое.
 
vikttur, еще раз сделала...
но он все равно повторно запрашивает фамилию.
А мне бы хотелось чтобы это выглядело так:

0. Новые вопросы
1. Напиши свою фамилию
2. Иванов
3. *Решение теста*
4. Конец теста
5. Твоя фамилия: "Иванов?" Правильно
6. Да / Нет


И как лучше сделать чтобы уже с полученной фамилии в самом конце сделать чтобы вместе с баллом было: "Иванов набрал 3 балла"
 
5-6 пункт сделала
 
Тема - о передаче переменной. Другие вопросы не связаны с темой
 
vikttur, но, макрос все равно не ссылается на полученный результат  (фамилия в начале теста), а запрашивает ее еще раз
Изменено: AnastasiaSchaste - 12.10.2019 21:58:59
 
Что Вы там понапеределывали? Посмотрите мой макрос, сравните со своим.
Вам дали такую задачу на курсах. Значит, чему-то хотите научиться. Но если не разбираться в предложенном, то какая это наука?

Вопрос темы - передача параметра в другой макрос. Повторный вызов вопроса никак с темой не связан.
Страницы: 1
Наверх