Excel VBA for循环不工作,保持出现错误消息

做一个单一的玩家二十一点模拟,但是当我运行它不断回来的消息:

编译错误

接下来没有For

For i = 1 To 5 If win = "False" Then Range("C13").Select Selection.Insert Shift:=xlDown Range("B11").Select Selection.Copy Range("C13").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Range("C18").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "=SUM(R[-5]C:R[-1]C)" Range("C19").Select ActiveCell.FormulaR1C1 = "" Range("H19").Select If Range("C18") < 22 And Range("C18") >= Range("B18") Then win = "True" End If If Range("C18") < 22 Then win = "Bust" End If Next i If win = "True" Then Application.Run "Dealer_wins" Else Application.Run "player_wins" End If End Sub 

你只是错过了End If在C18的testing!

而我摆脱了无用的select,因为这是一个非常耗费资源的命令,绝大多数情况下绝对没有必要!

  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 

已经提供的其他变体:

 .... 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") 

它总是会是true ,所以这个条件可以被删除,因为代码的过多部分,或者更新来比较[B18]与另一个单元格。

这就是为什么元素的开始和结束之间永远不应该超过10-15行。

由于你的缩进是好的(赞誉),其他评论者已经发现了最后的错误:

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

应该是

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

注意:根据R3uK的要求,没有删除