Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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 VBA For循环不工作,不断出现错误消息_Vba_Excel - Fatal编程技术网

Excel VBA For循环不工作,不断出现错误消息

Excel VBA For循环不工作,不断出现错误消息,vba,excel,Vba,Excel,制作单人21点模拟,但当我运行时,它会不断返回消息: 编译错误 下一个没有 i=1到5的 如果win=“False”,则 范围(“C13”)。选择 选择。插入移位:=xlDown 范围(“B11”)。选择 选择,复制 范围(“C13”)。选择 Selection.Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_ :=假,转置:=假 有选择。内饰 .Pattern=xlNone .TintAndShade=0 .PatternTintAndShade=0

制作单人21点模拟,但当我运行时,它会不断返回消息:

编译错误

下一个没有

i=1到5的

如果win=“False”,则
范围(“C13”)。选择
选择。插入移位:=xlDown
范围(“B11”)。选择
选择,复制
范围(“C13”)。选择
Selection.Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
有选择。内饰
.Pattern=xlNone
.TintAndShade=0
.PatternTintAndShade=0
以
范围(“C18”)。选择
Application.CutCopyMode=False
ActiveCell.FormulaR1C1=“=SUM(R[-5]C:R[-1]C)”
范围(“C19”)。选择
ActiveCell.FormulaR1C1=“”
范围(“H19”)。选择
如果范围(“C18”)<22且范围(“C18”)>=范围(“B18”),则
win=“True”
如果结束
如果范围(“C18”)小于22,则
win=“Bust”
如果结束
接下来我
如果win=“True”,则
应用程序。运行“经销商赢”
其他的
应用程序。运行“玩家赢”
如果结束
端接头

对于C18上的测试,您只是缺少了一个
结束If

我去掉了无用的
。选择
,因为这是一个非常消耗资源的命令,在大多数情况下是绝对不必要的

    For i = 1 To 5

        If win = "False" Then
            Range("C13").Insert Shift:=xlDown
            Range("B11").Copy

            With Range("C13")
                .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                            :=False, Transpose:=False
                With .Interior
                    .Pattern = xlNone
                    .TintAndShade = 0
                    .PatternTintAndShade = 0
                End With
            End With

            Application.CutCopyMode = False
            Range("C18").FormulaR1C1 = "=SUM(R[-5]C:R[-1]C)"
            Range("C19").FormulaR1C1 = ""

            If Range("C18") < 22 And Range("C18") >= Range("B18") Then
                win = "True"
            End If

            If Range("C18") < 22 Then
                win = "Bust"
            End If
        End If
    Next i

    If win = "True" Then
        Application.Run "Dealer_wins"
    Else
        Application.Run "player_wins"
    End If
End Sub
i=1到5的

如果win=“False”,则
范围(“C13”)。插入移位:=xlDown
范围(“B11”)。副本
带量程(“C13”)
.Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
带.内饰
.Pattern=xlNone
.TintAndShade=0
.PatternTintAndShade=0
以
以
Application.CutCopyMode=False
范围(“C18”)。公式1C1=“=总和(R[-5]C:R[-1]C)”
范围(“C19”)。公式1C1=“”
如果范围(“C18”)<22且范围(“C18”)>=范围(“B18”),则
win=“True”
如果结束
如果范围(“C18”)小于22,则
win=“Bust”
如果结束
如果结束
接下来我
如果win=“True”,则
应用程序。运行“经销商赢”
其他的
应用程序。运行“玩家赢”
如果结束
端接头
这就是为什么元素的开头和结尾之间不应该有超过10-15行的原因。这里是下一行

由于你的缩进很好(这值得称赞),其他评论者已经在结尾处发现了错误:

        If Range("C18") < 22 Then
            win = "Bust"
    End If
Next i
如果范围(“C18”)小于22,则
win=“Bust”
如果结束
接下来我
那应该是

        If Range("C18") < 22 Then
            win = "Bust"
        End If
    End If
Next i
如果范围(“C18”)小于22,则
win=“Bust”
如果结束
如果结束
接下来我

注意:根据R3uK的要求取消删除

已提供的附加变量:

....

For i = 1 To 5
    If win = "False" Then
        With [C13]
            .Insert
            .Value = [B11].Value2
            With .Interior
                .Pattern = xlNone
                .TintAndShade = 0
                .PatternTintAndShade = 0
            End With
        End With
        [C18].Value = Application.Sum([C13:C17])
        [C19] = ""
        If [C18].Value2 < 22 And [C18].Value2 >= [B18].Value2 Then 'this condition shall be reviewed
            win = "True"
        ElseIf [C18].Value2 < 22 Then
            win = "Bust"
        End If
    End If
Next i
If win = "True" Then
    Application.Run "Dealer_wins"
Else
    Application.Run "player_wins"
End If

....

它始终为
,因此,由于代码部分过多,可以删除此条件,或者更新以比较
[B18]
使用另一个单元格。

计算您的Ifs并结束Ifs。您在For循环中打开3条If语句,但仅关闭其中2条。一条
End If
缺失,就在
Next i
行之前。
Range(“C18”)>=Range(“B18”)
这是条件将返回
true
无论如何,它在您的代码中是什么意思?删除了我的答案,因为它是a(不太好)您的两倍。只需补充一点:OP有一个非常好的缩进,可以快速识别错误。他只需要学习如何使用这个好习惯。@gazz0x2z:您应该让它仍然获得一些支持,有重复的答案不是问题!这可能会让提问者有点困惑,但测试我们可以提出的建议是他的工作!;)取消删除它,这样我就可以投票给你的答案和你的公平竞争!;)
....

For i = 1 To 5
    If win = "False" Then
        With [C13]
            .Insert
            .Value = [B11].Value2
            With .Interior
                .Pattern = xlNone
                .TintAndShade = 0
                .PatternTintAndShade = 0
            End With
        End With
        [C18].Value = Application.Sum([C13:C17])
        [C19] = ""
        If [C18].Value2 < 22 And [C18].Value2 >= [B18].Value2 Then 'this condition shall be reviewed
            win = "True"
        ElseIf [C18].Value2 < 22 Then
            win = "Bust"
        End If
    End If
Next i
If win = "True" Then
    Application.Run "Dealer_wins"
Else
    Application.Run "player_wins"
End If

....
Range("C18") >= Range("B18")