Вызов подпрограммы (содержащей цикл до выполнения) в операторе IF / Else - PullRequest
0 голосов
/ 29 мая 2019

У меня есть do until loop Я продолжаю повторять в операторе IF/ELSE. Я хочу вместо этого вызывать sub (содержащий do until loop) внутри операторов IF / Else If / Then. Пожалуйста, помогите

Этот код работает, но я хочу сжать каждый do until loop в sub, который я могу вызвать с различными значениями Tf и gain:

Dim tmin As Double  
Dim hgmin As Double
Dim tf As Double
Dim hmix As Double
Dim hg As Double
Dim i As Double
tmin = -70               'Lowest temperature of fluid on chart (Fahreinhet)
hgmin = 79.66            'Lowest enthalpy(saturated vapor)

tf = InputBox("Enter Lower Temperature [Fahrenheit]")   'Lower temperature of system

i = tmin
hg = hgmin
If tf <= -9 Then
     Do Until i = tf
        hg = hg + 0.15
        i = i + 1
    Loop
ElseIf tf >= -9 And tf <= 60 Then
    Do Until i = -9
        hg = hg + 0.15
        i = i + 1
    Loop
    Do Until i = tf
        hg = hg + 0.125
        i = i + 1
    Loop
End If 
msgbox(hg)
End Sub

Код ниже не работает, либо цикл застрял, либо дает значение hmin вместо hmin + (gain * amount of iterations from tmin to Tf).

Sub main()
    Dim Tf As Double
    Dim i As Double, hg As Double, tmin As Double, hmin As Double

    Tf= InputBox("Enter Lower Temperature Value")
    hmin = 79.66

    hg = hmin
    tmin = -70
    i = tmin

    If Tf <= -9 Then
        Call subby(Tf, 0.15)

    ElseIf Tf >= -9 And Tf <= 60 Then
        Call subby(-9, 0.15)
        Call subby(Tf, 0.125)
    End If
    msgbox(hg)

End Sub

Sub subby(T As Double, gain As Double)
    Dim i As Double, hg As Double, tmin As Double, hmin As Double
    tmin = -70
    hmin = 79.66

    hg = hmin
    i = tmin
    Do Until i = T
        hg = hg + gain
        i = i + 1
    Loop

End Sub

Я хочу, чтобы приведенный ниже код пытался вызвать другой sub в операторе main sub IF/Else, чтобы он соответствовал приведенным выше значениям кода для hg.

1 Ответ

0 голосов
/ 29 мая 2019

Проблема с вашей попыткой перехода к сабвуферу в том, что ваши переменные не видны в этом сабе.Я вижу, что вы пытались «исправить» это, объявив эти переменные как локальные, но тогда основные переменные не изменились, верно?

Один из обходных путей - вставить МОДУЛЬ, а затем объявить свои переменные как PUBLIC :

Public tmin As Double  
Public hgmin As Double
Public tf As Double
Public hmix As Double
Public hg As Double
Public i As Double

Из документов:

Переменные, объявленные с помощью оператора Public, доступны всем процедурам во всех модулях во всех приложениях

Обязательно избавьтесь от этих дублированных объявлений переменных, как внутри вашего subby (), так и в main ().Они должны быть объявлены только в модуле.

Альтернативой может быть передача ВСЕХ переменных, к которым необходимо получить доступ, и их изменение в методе.Вы должны решить, что легче или лучше для вашей ситуации.

...