Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 为什么我会遇到这个If语句问题?_Excel_Vba_If Statement - Fatal编程技术网

Excel 为什么我会遇到这个If语句问题?

Excel 为什么我会遇到这个If语句问题?,excel,vba,if-statement,Excel,Vba,If Statement,我在VBA中遇到错误“End If WITH Block If”。Followin是我的代码。有人能帮我找出我犯的错误吗 Function ProjectedProductionPlan(Coverage As Double, Sales As Variant, ProjectedStock As Double) As Double Dim count As Integer Dim ResidualBalance As Double Dim ProjectedPlan A

我在VBA中遇到错误“End If WITH Block If”。Followin是我的代码。有人能帮我找出我犯的错误吗

Function ProjectedProductionPlan(Coverage As Double, Sales As Variant, ProjectedStock As Double) As Double
    Dim count As Integer
    Dim ResidualBalance As Double
    Dim ProjectedPlan As Double
    Dim k As Integer
    Dim x As Integer
    Dim y As Single
    Dim s As Single

    count = Sales.count
    s = 0
    ResidualBalance = ProjectedStock
    i = 1
        If Coverage < 1 Then
            ProjectedPlan = (Sales(i) * Coverage) - ResidualBalance
          ElseIf Coverage = 1 Then
            ProjectedPlan = Sales(i) - ResidualBalance
          Else
            For k = 1 To count
                 Do Until k - Coverage > 0
                        x = k
                        y = Coverage - x
                        s = Sales(k) + s
                 Loop
            Exit For
        End If
            ProjectedPlan = s + (Sales(x + 1) * y)

End Function
Function ProjectedProductionPlan(覆盖率为双倍,销售为变型,ProjectedStock为双倍)为双倍
将计数设置为整数
双精度剩余天平
Dim ProjectedPlan为双精度
将k变为整数
作为整数的Dim x
像单身一样暗淡
她是单身
count=Sales.count
s=0
剩余余额=预计库存
i=1
如果覆盖率<1,则
项目计划=(销售(i)*覆盖范围)-剩余余额
ElseIf覆盖率=1,则
项目计划=销售(i)-剩余余额
其他的
对于k=1进行计数
直到k-覆盖率>0为止
x=k
y=覆盖率-x
s=销售额(k)+s
环
退出
如果结束
ProjectedPlan=s+(销售(x+1)*y)
端函数
根据我的评论:

为了消除编译错误,您需要将
Exit For
更改为
Next
,以创建一个实际的迭代,而
Exit For
只是循环中Exit循环中的一条语句。MS文档位于
上,用于…下一个
循环

但是,您也可以使用
Do-Until…循环
。正如我看到的代码,修复上面的代码会立即使代码陷入无限循环,因为没有变量(无论是
k
还是
coverage
)得到调整。因此,我的建议是在
For…Next
循环中包含
IF
语句。例如:

For k = 1 To count
    If k - Coverage > 0 Then
        Exit For
    Else
        x = k
        y = Coverage - x
        s = Sales(k) + s
    End If
Next
我还没有检查代码的其余部分,看看实现这一点是否真的是您所需要的


小旁注:使用
Integer
数据类型变量只会在某一点上咬你一口。改为使用
Long

Exit For
更改为:
Next
以消除编译错误。但我觉得你会陷入一个无休止的循环。您可能需要在
For
循环中使用
If
语句。当
TRUE
时,在
For
循环中使用
Exit For
,并放弃
Do,直到。。。循环
这样做。那么这个问题可以结束了吗@米尔扎