【问题标题】:Calling a Sub (containing a Do until loop) within a IF/Else Statement在 IF/Else 语句中调用 Sub(包含 Do until 循环)
【发布时间】:2019-05-28 22:15:03
【问题描述】:

我有一个do until loop,我不得不在IF/ELSE 语句中重复。我想在IF/Else If/Then 语句中调用sub(包含do until loop)。请帮忙

此代码有效,但我想将每个 do until loop 压缩为 sub,我可以使用不同的 Tfgain 值调用:

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

我希望下面的代码尝试在 main sub IF/Else 语句中调用另一个 sub 的方法,以匹配上述 hg 的代码值。

【问题讨论】:

  • 首先,将这些值相乘而不是循环会更简单吗?!即:hg = hg + (tf * 0.15) 或非常相似的逻辑/计算。
  • 似乎subby 没有返回任何东西(subby 中的hgmain 中的hg 不是同一个变量)

标签: vba subroutine


【解决方案1】:

您尝试移动到子的问题是您的变量在该子中不可见。我看到你试图通过将这些变量声明为本地变量来“修复”它,但是主要变量没有得到改变,对吗?

一种解决方法是插入一个 MODULE,然后在那里将变量声明为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() 中删除那些重复的变量声明。它们只能在模块中声明。

另一种方法是将所有需要访问和更改的变量传递给方法。您必须决定哪个更容易,哪个更适合您的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-24
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    相关资源
    最近更新 更多