Операторы VBA If с несоответствием типов ошибок общедоступных переменных (ошибка 13)

Я думаю, что это, вероятно, быстрое решение, но оно ставило меня в тупик все утро.

Я определил многие переменные как общедоступные в верхней части проекта vba (любые переменные, оканчивающиеся на «yn», являются строковыми, а остальные — вариантными или одиночными). Различные сабвуферы в рамках проекта определяют эти переменные с помощью серии вопросов и ответов. Теперь в конце, когда я пытаюсь скомпилировать определенные переменные в уравнение, я получаю сообщение об ошибке.

Я уже проделал этот же процесс с другим окончательным уравнением на прошлой неделе, и он работал нормально. Я проверил каждую переменную, чтобы убедиться, что она введена правильно, и я не вижу ничего плохого в коде. Пожалуйста помоги! Спасибо!

    Public Sub Rth1 ()

    Dim Red1th as single

    If Width1thyn = vbYes Then
        If Length1thyn = vbYes Then
            If V1turnspeedyn = vbYes Then
                Red1th = ((Width1th + 20) / (1.47 * 20)) - 1
            Else
                Red1th = ((Width1th + 20) / (1.47 * V1turnspeedstudy)) - 1
            End If
        Else
            If V1turnspeedyn = vbYes Then
                Red1th = ((Width1th + Length1thstudy) / (1.47 * 20)) - 1
            Else
                Red1th = ((Width1th + Length1thstudy) / (1.47 * V1turnspeedstudy)) - 1
            End If
        End If
    Else
        If Length1thyn = vbYes Then
            If V1turnspeedyn = vbYes Then
                Red1th = ((Width1thstudy + 20) / (1.47 * 20)) - 1
            Else
                Red1th = ((Width1thstudy + 20) / (1.47 * V1turnspeedstudy)) - 1
            End If
        Else
            If V1turnspeedyn = vbYes Then
                Red1th = ((Width1thstudy + Length1thstudy) / (1.47 * 20)) - 1
            Else
                Red1th = ((Width1thstudy + Length1thstudy) / (1.47 * V1turnspeedstudy)) - 1
            End If
        End If
    End If

    MsgBox "Red Clearance Interval is " & Red1th, "vbOkOnly", "Red Clearance Interval"

    End Sub

person user2623046    schedule 29.07.2013    source источник
comment
vbYes равно 6. Если ваш тип данных ...yn является строкой, вы можете получить странные результаты при сравнении. Пробовали ли вы Option Explicit убедиться, что у вас нет орфографических ошибок?   -  person SeanC    schedule 29.07.2013
comment
Я попытался преобразовать все мои переменные yn обратно в Integer вместо строки, но это ничего не изменило. Я также только что добавил Option Explicit, и он ничего не нашел. Я все еще получаю ту же ошибку, и теперь другое последнее уравнение, которое работало ранее, тоже не работает.   -  person user2623046    schedule 29.07.2013
comment
Если что-то не работает при использовании Option Explicit, значит, вы нигде не Dimизменили переменную. Если программа не работает с уравнениями, я бы проверил, как определены переменные. vartype должен помочь вам узнать, какой тип данных переменная ожидает/использует   -  person SeanC    schedule 29.07.2013
comment
Какая строка вызывает ошибку?   -  person Andy G    schedule 29.07.2013


Ответы (1)


vbYes используется при возврате из MsgBox.

Если ваши переменные не зависят от возврата MsgBox, рассмотрите возможность использования Booleanили назначьте собственное перечисление (избегая использования vb начальных имен),

or

Убедитесь, что вы используете vbYes в назначениях в предыдущем коде.

person LS_ᴅᴇᴠ    schedule 29.07.2013