Excel VBA-仅在with语句之后结束的while语句
如果“wend”仅放在“end with”之后,则我似乎无法在with语句中放置while语句Excel VBA-仅在with语句之后结束的while语句,excel,vba,while-loop,Excel,Vba,While Loop,如果“wend”仅放在“end with”之后,则我似乎无法在with语句中放置while语句 Sub Testing() Dim i As Integer i = 1 With ThisWorkbook.Worksheets("Data") While i <= 4 .Cells(i, 20).Value = "5" End With 'get error, as the wend for the while is not yet fo
Sub Testing()
Dim i As Integer
i = 1
With ThisWorkbook.Worksheets("Data")
While i <= 4
.Cells(i, 20).Value = "5"
End With 'get error, as the wend for the while is not yet found
i = i + 1
Wend
End Sub
子测试()
作为整数的Dim i
i=1
使用此工作簿。工作表(“数据”)
而i子测试()
作为整数的Dim i
i=1
使用此工作簿。工作表(“数据”)
趁我还活着的时候
在输入while语句之前,我需要对工作表做一些事情,但是我还需要在while完成之前结束
你不能这样,这不是合法的语法。块有一个开始和一个结束标记,它们不能相互交织——不管我们看到的是什么类型的块
非法:
If条件然后
'...
带着什么
'...
如果结束
'...
以
这并不意味着块不能根据需要嵌套
法律:
If条件然后
带着什么
'...
以
如果结束
编译器从上到下“读取”代码。当它遇到block语句(例如With
)时,它希望下一个End{block}
语句关闭该块-如果不是这样,则抛出语法错误,代码不会编译
因此,您不能在Wend
标记之前使用End With
(注意:Do While…Loop
将是;同时考虑到编译时已知迭代次数,应该使用For…Next
循环,而不是手动增加循环体中的计数器)
带有
块的有时是实用的,但实际上并不需要
在这种特殊情况下,与此工作簿一起使用。工作表(“数据”)
正在取消对此工作簿中存在的工作表的引用;如果该工作表在编译时存在于此工作簿中
,那么,为了避免取消对已从项目中任何位置全局访问的工作表的引用,请将该模块的(名称)
属性设置为例如数据表
,然后您可以直接引用它,如下所示:
DataSheet.Cells(i, 20).Value = "5"
除非您真正的代码是用
语句嵌套(为了理智起见,不应该这样做!),否则将以
标记结尾移动到循环外部以合法嵌套两个块就足够了。如果循环外的代码也可以使用带
块的,那么它也可以使用它:
For i = 1 To 4
With DataSheet
.Cells(i, 20).Value = "5"
End With
Next
With DataSheet
'other code
End With
在Wend
之后移动以
结束。注意:While…Wend
是老式的。使用For
循环,或在With
之前使用While
。因为这个With
语句毫无意义,所以实际代码可能有更多的内容?是的,实际代码有更多的内容,我在上面的示例中理解,将while放在宽度之前似乎很明显,因为它对结果没有影响,但是在我的实际代码中,在输入while语句之前,我需要对工作表做一些事情,但在while语句中移动到另一个工作簿时,我还需要在while语句完成之前结束while。如果在循环中结束a,并且循环在结束之前返回到,您希望发生什么?它已经结束了,它不会返回代码,找到并重新应用它。即使它确实这样做了,它也会让代码中实际发生的事情变得非常混乱。非常感谢Warcupine,您提供了一个替代方案并解释了为什么它不起作用。我现在明白了,在我当前的代码中,当它第二次循环时,我试图结束一些没有再次开始的事情。非常感谢您的详细解释!
For i = 1 To 4
With DataSheet
.Cells(i, 20).Value = "5"
End With
Next
With DataSheet
'other code
End With