【发布时间】:2020-05-13 09:01:13
【问题描述】:
如果输入数据符合某些条件,则需要打印出一个值的自动宏。我遇到的问题是它陷入了无限循环并且不会进入下一行。我是做循环的新手,所以欢迎任何建议或帮助。如果我尝试退出 for 它告诉我它无法识别下一个 else if 的 if 语句。
更新: 我已经按照建议清理了代码。 我在 .end(x1down) 中添加了但我得到一个应用程序定义或对象定义的错误 当我使用 .end(x1down).row 时,我得到的每个可能只能迭代一个集合对象或一个数组
我还不能发布图片,所以我将它们上传到 imgur 这里是显示输入数据示例的链接,图表数据来自https://imgur.com/a/3wiIX1t
Sub MonthCalc()
Dim seat As Range
Dim cfdp As Integer
Dim si As Range
Dim eqp As Range
Dim leg As Range
Dim result As String
For Each seat In Range("e2").End(x1down).Row
If seat.Value = 2 Then
For Each si In Range("c2").End(x1down)
If si.Value >= 0 And si.Value <= 359 Then
For Each leg In Range("f2").End(x1down)
If leg.Value = "1" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("b5").Value
ElseIf leg.Value = "2" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("c5").Value
ElseIf leg.Value = "3" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("d5").Value
ElseIf leg.Value = "4" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("e5").Value
ElseIf leg.Value = "5" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("f5").Value
ElseIf leg.Value = "6" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("g5").Value
ElseIf leg.Value = "7" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("h5").Value
End If
Range("g:g") = cfdp
Next leg
ElseIf si.Value >= 400 And si.Value <= 459 Then
For Each leg In Range("f2").End(x1down)
If leg.Value = "1" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("b6").Value
ElseIf leg.Value = "2" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("c6").Value
ElseIf leg.Value = "3" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("d6").Value
ElseIf leg.Value = "4" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("e6").Value
ElseIf leg.Value = "5" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("f6").Value
ElseIf leg.Value = "6" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("g6").Value
ElseIf leg.Value = "7" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("h6").Value
End If
Range("g:g") = cfdp
Next leg
ElseIf si.Value >= 500 And si.Value <= 559 Then
For Each leg In Range("f2").End(x1down)
If leg.Value = "1" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("b7").Value
ElseIf leg.Value = "2" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("c7").Value
ElseIf leg.Value = "3" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("d7").Value
ElseIf leg.Value = "4" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("e7").Value
ElseIf leg.Value = "5" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("f7").Value
ElseIf leg.Value = "6" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("g7").Value
ElseIf leg.Value = "7" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("h7").Value
End If
Range("g:g") = cfdp
Next leg
ElseIf si.Value >= 600 And si.Value <= 659 Then
For Each leg In Range("f2").End(x1down)
If leg.Value = "1" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("b8").Value
ElseIf leg.Value = "2" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("c8").Value
ElseIf leg.Value = "3" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("d8").Value
ElseIf leg.Value = "4" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("e8").Value
ElseIf leg.Value = "5" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("f8").Value
ElseIf leg.Value = "6" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("g8").Value
ElseIf leg.Value = "7" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("h8").Value
End If
Range("g:g") = cfdp
Next leg
ElseIf si.Value >= 700 And si.Value <= 1159 Then
For Each leg In Range("f2").End(x1down)
If leg.Value = "1" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("b9").Value
ElseIf leg.Value = "2" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("c9").Value
ElseIf leg.Value = "3" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("d9").Value
ElseIf leg.Value = "4" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("e9").Value
ElseIf leg.Value = "5" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("f9").Value
ElseIf leg.Value = "6" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("g9").Value
ElseIf leg.Value = "7" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("h9").Value
End If
Range("g:g") = cfdp
Next leg
ElseIf si.Value >= 1200 And si.Value <= 1259 Then
For Each leg In Range("f2").End(x1down)
If leg.Value = "1" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("b10").Value
ElseIf leg.Value = "2" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("c10").Value
ElseIf leg.Value = "3" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("d10").Value
ElseIf leg.Value = "4" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("e10").Value
ElseIf leg.Value = "5" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("f10").Value
ElseIf leg.Value = "6" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("g10").Value
ElseIf leg.Value = "7" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("h10").Value
End If
Range("g:g") = cfdp
Next leg
ElseIf si.Value >= 1300 And si.Value <= 1659 Then
For Each leg In Range("f2").End(x1down)
If leg.Value = "1" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("b11").Value
ElseIf leg.Value = "2" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("c11").Value
ElseIf leg.Value = "3" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("d11").Value
ElseIf leg.Value = "4" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("e11").Value
ElseIf leg.Value = "5" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("f11").Value
ElseIf leg.Value = "6" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("g11").Value
ElseIf leg.Value = "7" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("h11").Value
End If
Range("g:g") = cfdp
Next leg
ElseIf si.Value >= 1700 And si.Value <= 2159 Then
For Each leg In Range("f2").End(x1down)
If leg.Value = "1" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("b12").Value
ElseIf leg.Value = "2" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("c12").Value
ElseIf leg.Value = "3" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("d12").Value
ElseIf leg.Value = "4" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("e12").Value
ElseIf leg.Value = "5" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("f12").Value
ElseIf leg.Value = "6" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("g12").Value
ElseIf leg.Value = "7" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("h12").Value
End If
Range("g:g") = cfdp
Next leg
ElseIf si.Value >= 2200 And si.Value <= 2259 Then
For Each leg In Range("f2").End(x1down)
If leg.Value = " 1" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("b13").Value
ElseIf leg.Value = "2" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("c13").Value
ElseIf leg.Value = "3" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("d13").Value
ElseIf leg.Value = "4" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("e13").Value
ElseIf leg.Value = "5" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("f13").Value
ElseIf leg.Value = "6" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("g13").Value
ElseIf leg.Value = "7" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("h13").Value
End If
Range("g:g") = cfdp
Next leg
ElseIf si.Value >= 2300 And si.Value <= 2359 Then
For Each leg In Range("f2").End(x1down)
If leg.Value = "1" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("b14").Value
ElseIf leg.Value = "2" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("c14").Value
ElseIf leg.Value = "3" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("d14").Value
ElseIf leg.Value = "4" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("e14").Value
ElseIf leg.Value = "5" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("f14").Value
ElseIf leg.Value = "6" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("g14").Value
ElseIf leg.Value = "7" Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("h14").Value
End If
Range("g:g") = cfdp
Next leg
End If
Next si
ElseIf seat.Value = 3 Then
For Each eqp In Range("b:b")
If eqp.Value = 330 Or eqp.Value = 767 Then
For Each si In Range("c2").End(x1down)
If si.Value >= 0 And si.Value <= 559 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("d18").Value
ElseIf si.Value >= 600 And si.Value <= 659 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("d19").Value
ElseIf si.Value >= 700 And si.Value <= 1259 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("d20").Value
ElseIf si.Value >= 1300 And si.Value <= 1659 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("d21").Value
ElseIf si.Value >= 1700 And si.Value <= 2359 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("d22").Value
End If
Range("g:g") = cfdp
Next si
ElseIf eqp.Value = 777 Or eqp.Value = 787 Then
For Each si In Range("c2").End(x1down)
If si.Value >= 0 And si.Value <= 559 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("b18").Value
ElseIf si.Value >= 600 And si.Value <= 659 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("b19").Value
ElseIf si.Value >= 700 And si.Value <= 1259 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("b20").Value
ElseIf si.Value >= 1300 And si.Value <= 1659 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("b21").Value
ElseIf si.Value >= 1700 And si.Value <= 2359 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("b22").Value
End If
Range("g:g") = cfdp
Next si
End If
Next eqp
ElseIf seat.Value = 4 Then
For Each eqp In Range("b:b")
If eqp.Value = 330 Or eqp.Value = 767 Then
For Each si In Range("c2").End(x1down)
If si.Value >= 0 And si.Value <= 559 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("e18").Value
ElseIf si.Value >= 600 And si.Value <= 659 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("e19").Value
ElseIf si.Value >= 700 And si.Value <= 1259 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("e20").Value
ElseIf si.Value >= 1300 And si.Value <= 1659 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("e21").Value
ElseIf si.Value >= 1700 And si.Value <= 2359 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("e22").Value
End If
Next si
ElseIf eqp.Value = 777 Or eqp.Value = 787 Then
For Each si In Range("c2").End(x1down)
If si.Value >= 0 And si.Value <= 559 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("c18").Value
ElseIf si.Value >= 600 And si.Value <= 659 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("c19").Value
ElseIf si.Value >= 700 And si.Value <= 1259 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("c20").Value
ElseIf si.Value >= 1300 And si.Value <= 1659 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("c21").Value
ElseIf si.Value >= 1700 And si.Value <= 2359 Then
cfdp = ThisWorkbook.Sheets("FAR117Chart").Range("c22").Value
End If
Range("g:g") = cfdp
Next si
End If
Next eqp
End If
Next seat
End Sub
【问题讨论】:
-
你可能想要一个循环。另外,不要循环遍历整个列。有关如何找到最后一个单元格的信息,请参阅this question。这么多级别的缩进(和循环)是一种代码味道。
-
您可以发送您的工作簿吗?当您手头有工作簿时,调试会容易得多。
-
用文字解释你想用你的数据做什么会很有帮助。这段代码可能会更短。
-
@RossSymonds 试图找到一种方法来发布 excel 文件但无法下班
-
ElseIf si.Value >= 400 Then: If si.Value <= 459 Then- 为什么这不仅仅是ElseIf si.Value >= 400 And si.Value < 460 Then- 不必要的缩进要少得多,更容易阅读。您可能还想阅读Select Casestatements