我试图循环遍历工作簿中的所有工作表。我有以下代码,它工作得很好;唯一的问题是,它只有在第一张纸上启动宏时才有效;如果我在任何其他地方做它,它会在第一次循环后停止。遍历所有工作表
WS_Count = ActiveWorkbook.Worksheets.Count
For i = 1 To WS_Count
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.ActiveSheet
'if sheet contains evdre
Set c = ws1.Cells.Find("blabla")
If Not c Is Nothing Then
'do things
End If
Next i
我不知道这个问题是由于一个事实,即宏应该总是在第一页,或者如果启动有一些错误代码。 感谢您的任何帮助
编辑 在'做某事我实际上创造隐藏的床单(我活跃在一个隐藏的副本);这可以让计数陷入困境吗?并因此只能在第一张工作
是我还是没有任何部分工作表在此代码中更改? – Poof
尽管iDevlop的回答可能是更有效的方法,但如果您在代码中更改了一行,它将适用于您:只要在您的“做事情”中设置ws1 = ThisWorbook.Sheets(I)'适当引用'ws1'。 –
是的,你的代码中的问题只是,ActiveSheet不会改变,所以它在同一张表上多次循环。你可以a)改变它像斯科特解释或b)使用基于对象的循环,如iDevlop explainend。 b)是更好的解决方案,因为它更易于阅读和扩展。 –