【发布时间】:2019-11-13 00:45:17
【问题描述】:
下面是我想出的代码,它从单元格 Q13 复制值,并将它们粘贴到 E 列中,直到列表完成(Q13 每次都使用新值更新)。我有一个条件,如果 Q13 读取“45”,则复制该值并将其粘贴到 p 列中。我知道这是一个 if -then- else 语句,但我得到了几个不同的编译错误(如果没有 end if 则阻塞,如果没有 if 则阻塞)并意识到这很可能是我的语法。如果有人可以对此进行评论,那就太棒了。
Sub Test()
Dim c As Range
Dim ws As Worksheet: Set ws = Sheet2
Dim range1 As Range: Set range1 = ws.Range("Q13")
Dim Cell As Range
For Each Cell In range1
If Cell.Value = "45" Then
NextRow = ws.Cells(ws.Rows.Count, "P").End(xlUp).Offset(1, 0).Row
Cell.Copy ws.Range("P" & NextRow)
Else
For Each c In Range("B2:B" & Range("B65536").End(xlUp).Row)
Dim R As Range
Set R = Worksheets("Sheet2").Cells(Rows.Count, "E").End(xlUp) 'last cell in Column E with data
If Len(R.Value) > 0 Then Set R = R.Offset(1)
R.Value = Worksheets("Sheet2").Range("Q13").Value
Exit For
End If
Next ws
End If
【问题讨论】:
-
Google 错误 :)
Next ws例如ws没有循环 -
正确的缩进可以帮助你找出语法错误。提示:您缺少
Next。 -
FWIW 没有必要在
Next ws中有ws(或任何东西):只需Next就足够了。 -
@MathieuGuindon -
Next ws不应该抛出错误吗?启动它的 for 循环是For each Cell...或者 VBA 实际上是否忽略了Next之后的任何内容? (我通常总是包含Next变量,例如Next ws / Next Cell,所以我可以很容易地看到我在哪个循环中,但从未真正考虑过 VBA 是否真的“使用”了该信息。 -
@BruceWayne 是的,
Next ws是语法错误,因为ws不是循环变量。我从来没有在Next中指定循环变量,因为如果那个循环变量有任何值,那么循环体可能做的事情太多,应该重构到它自己的过程范围内。在语法上只有一个循环变量在Next标记之后是合法的,这就是最后进入的循环的循环变量。这种Next foo语法的存在只是为了支持Next foo, bar的纯粹可憎。
标签: excel vba compilation