使用VBA进行Z因子迭代

如何解决使用VBA进行Z因子迭代

我创建了带有两个子例程的表单按钮。 1.压力深度计算
2. Z因子计算

都是迭代。 (1)正常运行,而(2)未执行。

以下是代码

Sub PressureDepthCalculation()
    'Declaring Variables
    Dim i,t,row As Integer
    t = Range("B5").Value
    row = 11
    'For Loop
    For i = t To 0 Step -100
        'Depth caclculation
        Range("A" & row).Value = i
        'Pressure calculation
        Range("B" & row).Value = Range("F5").Value + 0.052 * Range("F6") * i
        row = row + 1
    Next i
End Sub
    
Sub ZFactorCalculation()
    'Z factor calculation
    Dim r1,r2,r3,r4,r5,ppc,tpc,ppr,tpr,fr,dfr,ddfr,rhor As Double
    Dim i,row,t As Integer
    t = 1
    row = 11
    Range("D6").Value = 10.731
    a1 = 0.3265
    a2 = 1.07 * -1
    a3 = 0.5339 * -1
    a4 = 0.01569
    a5 = 0.05165 * -1
    a6 = 0.5475
    a7 = 0.7361 * -1
    a8 = 0.1844
    a9 = 0.1056
    a10 = 0.6134
    a11 = 0.721

    For i = t To 100
        ppc = (4.6 + (0.1 * Range("H6").Value) - (0.258 * Range("H6").Value ^ 2) * 10.1325 * 14.7)
        tpc = (99.3 + (180 * Range("H6").Value) - (6.94 * Range("H6").Value ^ 2) * 1.8)
        ppr = 6760 / ppc
        tpr = Range("B6").Value / tpc
        rhor = 0.27 * ppr / tpr
        r1 = (a1 + (a2 / tpr) + (a3 / tpr ^ 3) + (a4 / tpr ^ 4) + (a5 / tpr ^ 5))
        r2 = ((0.27 * ppr) / tpr)
        r3 = (a6 + (a7 / tpr) + (a8 / tpr ^ 2))
        r4 = a9 * ((a7 / tpr) + (a8 / tpr ^ 2))
        r5 = (a10 / tpr ^ 3)
        fr = (r1 * rhor) - (r2 / rhor) + (r3 * rhor ^ 2) - (r4 * rhor ^ 5) + (r5 * (1 + (a11 * rhor ^ 2))) * (Exp(-a11 * rhor ^ 2)) + 1
        dfr = (r1) + (r2 / rhor ^ 2) + (2 * r3 * rhor) - (5 * r4 * rhor ^ 4) + (2 * r5 * rhor * (Exp(-a11 * rhor ^ 2)) * ((1 + (2 * a11 * rhor ^ 3)) - (a11 * rhor ^ 2 * (1 + (a11 * rhor ^ 2)))))
        ddfr = rhor - (fr / dfr)

        If Abs(rhor - ddfr) <= 0.000000000001 Then
            Range("I" & r).Value = (0.27 * ppr) / (rhor * tpr)
        Else
            rhor = ddfr


End If

此外,当在(1)中计算Range(“ B”&row).value时,我想用它代替(2)中的6760来计算ppc。

解决方法

您的第二个循环似乎没有继续该循环的指令。

您可以执行以下操作:

For i = t To 100 **Step someNumber** 'The -Step- argument was used in loop 1,but was omitted in loop 2

或者这个:

For i = t To 100
    'the rest of your code here
**Next i** 'will increment i by 1

欢迎使用StackOverflow:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?