Профессиональные приемы работы в Microsoft Excel

Обмен опытом => Microsoft Excel => Тема начата: Александр Баландин от 16.02.2015, 23:39

Название: Не очищается переменная
Отправлено: Александр Баландин от 16.02.2015, 23:39
Привет всем, вот такой "код", проблема в том что когда вводишь значение "1" пишет: "функция не существует", так и надо, но потом пишет ответ предыдущего решения, в чем проблема?
Код

Dim x, y As Single

Sub ghrt ()
     x = Val(InputBox("Введите значение"))
     If x <> 1 Then y = 1 / ((x ^ 2) - 1) Else MsgBox "Функция не существует"
     MsgBox y
End Sub
Название: Re: Не очищается переменная
Отправлено: vikttur от 17.02.2015, 00:58
Переменные заданы для модуля, поэтому их значение сохраняется.
Если переменные используются только в этой процедуре, их нужно определять в теле процедуры, после строки Sub...
В VBA нужно задавать тип каждой переменной. В Вашей записи x имеет тип Value

Выводите сообщение только при наличии результата:
    If x <> 1 Then
        y = 1 / ((x ^ 2) - 1)
        MsgBox y
    Else
        MsgBox "Функция не существует"
    End If
Название: Re: Не очищается переменная
Отправлено: _Boroda_ от 17.02.2015, 10:37
Или так

Sub ghrt ()
     x = Val(InputBox("Введите значение"))
     If x <> 1 Then y = 1 / ((x ^ 2) - 1) Else y = "Функция не существует"
     MsgBox y
End Sub
Название: Re: Не очищается переменная
Отправлено: vikttur от 17.02.2015, 10:53
Саня, тут подозрение, что у не должна меняться, если х=1, т.к. переменные вынесены за пределы процедуры. Но, больше всего, что это ошибочно.