Консультация № 54332
04.09.2006, 22:18
0.00 руб.
0 3 2
Здравствуйте, уважаемые эксперты!

Проблемная ситуация, никак не могу обойти ее и надеюсь на Вашу помощь. Постараюсь изложить как можно яснее и короче.
Проблема вот в чем: в Excel 97 используется UserForm для короткого теста. Вопросы подставляются из скрытого листа.Здесь все нормально, никаких глюков. В этом VeryHidden Листе Строка 1 - это шапка таблицы, то есть содержимое ячеек A1:D1 не изменяется. Значения ячеек А2:А6 и B2:B6 также фиксированы (столбец А содержит вопросы, столбец В - верные ответы). Ответы испытуемого по идее должны записываться в ячейки C2:C6, но записываются они на самом деле со смещением на 1 строку вниз. При этом пятый (последний) ответ вообще никуда не записывается! Думал - проблема в formulaR1C1 и заменил на Value: эффект нулевой. А самое интересное - в четвертый столбец количество времени, потраченное на каждый ответ, записывается правильно, заполняются ячейки D2:D6.
Не могли бы Вы подсказать, в чем причина такого странного поведения приложения ? В глючности Office не могу упрекнуть. Весь основной код -в приложении, процедуры подсчета времени не стал включать, так как они работают нормально.

Приложение:
Option ExplicitDim NumAns As Integer------------------Private Sub CommandButton1_Click()Select Case NumAns ‘номер подставляемого вопроса Case 1 CommandButton1.Caption = "Далее" Label1.Caption = "Вопрос № 1:" TextBox1.Text = Worksheets(2).Range("A2").Value Worksheets(2).Range("C2").Value = TextBox2.Text TextBox2.Text = "" NumAns = 2 Case 2 Label1.Caption = "Вопрос № 2:" TextBox1.Text = Worksheets(2).Range("A3").Value Worksheets(2).Range("C3").Value = TextBox2.Text TextBox2.Text = "" NumAns = 3 Case 3 Label1.Caption = "Вопрос № 3:" TextBox1.Text = Worksheets(2).Range("A4").Value Worksheets(2).Range("C4").Value = TextBox2.Text TextBox2.Text = "" NumAns = 4 Case 4 Label1.Caption = "Вопрос № 4:" TextBox1.Text = Worksheets(2).Range("A5").Value Worksheets(2).Range("C5").Value = TextBox2.Text TextBox2.Text = "" NumAns = 5 Case 5 Label1.Caption = "И последний вопрос!" TextBox1.Text = Worksheets(2).Range("A6").Value Worksheets(2).Range("C6").Value = TextBox2.Text TextBox2.Text = "" NumAns = 6 Case 6 If MsgBox("Тест закончен!Посмотри и заплачь!", vbOKOnly) = vbOK Then Лист2.Visible = xlSheetVisible Лист2.Activate Unload UserForm1 End IfEnd SelectEnd Sub---------------Private Sub UserForm_Activate()NumAns = 1End SubPrivate Sub Workbook_BeforeClose(Cancel As Boolean)Лист2.Visible = xlSheetVeryHiddenEnd SubPrivate Sub Workbook_Open()UserForm1.ShowEnd Sub

Обсуждение

Неизвестный
04.09.2006, 23:50
общий
это ответ
Здравствуйте, Varfolomey!

Мне кажется, есть ошибка в логике самой программы... на примере case 1:

- сюда программа входит при значении NumAns = 1 (это значение присваивается при активации) при нажатии на CommandButton1
- войдя, устанавлививается значение Label1.Caption = "Вопрос № 1" и т.д и вносится ответ во вторую строку... Обратите внимание - по первому нажатию кнопки (уже, по всей видимости, по принятию первого ответа) Label становится "Вопрос №1", хотя наверно должно уже появиться "Вопрос №2"

Однако, судя по описанию должно было быть несколько иначе:
- по активации в Label1 устанавливается "Вопрос №1" и NumAns = 1
- ожидается ответ.
Далее при первом ответе (NumAns = 1) case 1 должен переключить Label2 на "Вопрос №2" (из третей строки листа с вопросами), подготовив форму к принятию второго ответа, но значение (до обнуления) TextBox2 нужно внести в строку 2, и переключиться на NumAns = 2.

Неизвестный
05.09.2006, 09:58
общий
это ответ
Здравствуйте, Varfolomey!
Попробуйте пройти программу под отладчиком.
Попробуйте заменить оператор Range() на Cells(i,j)- прямая запись в ячейку
Cинтаксис примерно такой: Worksheets(2).Cells(НОМЕР строки, НОМЕР столбца)
Вместо номера строки подставьте переменную NumAns или (NumAns+1).
Должно помочь.
Неизвестный
05.09.2006, 10:10
общий
Просьба всем экспертам не обращать внимание на адресата оценки - компьютер бастанул (надеюсь, не надолго), а дело весьма срочное, пришлось воспользоваться машиной брата. Еще раз респект всем ответившим!Varfolomey
Форма ответа