循环遍历工作簿中的每个工作表
我试图循环遍历工作簿中的每个工作表,但它不工作。我认为这是ActiveWorkbook.Worksheets不能识别每个工作表,只能在Active工作表上运行。任何建议都会很棒!我相信这是一个基本的修复,但似乎无法弄清楚。谢谢!循环遍历工作簿中的每个工作表
Sub LoopThroughWorksheets()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
If (ws.Name <> "Sheet1") And (ws.Name <> "Sheet2") And (ws.Name <> "Sheet8") And (ws.Name <> "Sheet42") Then
With ws
'code
'Sheets("Formula").Select
Range("FormulaRow").Copy
'Selection.Copy
ActiveSheet.Select
ActiveSheet.Range("A1").Select
ActiveSheet.Paste
Calculate
Range("Q1:X1").Select
Selection.Copy
Range("Q3:X3000").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Calculate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End With
End If
Next ws
End Sub
对于With
声明,你需要将每个你想引用对象与.
使用它你打算的方式同步进行。 但是,如果我理解你的intnent,我认为最简单的解决办法是在这行代码添加:
ws.Select
如下:
For Each ws In ActiveWorkbook.Worksheets
If (ws.Name <> "Sheet1") And (ws.Name <> "Sheet2") And (ws.Name <> "Sheet8") And (ws.Name <> "Sheet42") Then
ws.Select
With ws
'code
'Sheets("Formula").Select
Range("FormulaRow").Copy
...
,然后你也应该改变工作的事情例如从Range("FormulaRow").Copy
到.Range("FormulaRow").Copy
,因此您一定要正确使用With
声明。
希望是有道理的......
哦,是的,这是回到我身边。不幸的是,FormulaRow是在不同的标签,并试图从不是Ws标签复制是让我绊倒。 – 2014-10-27 22:09:11
通过添加ws.Select,它不会跳过我不想执行此操作的工作表。 – 2014-10-27 22:11:09
它绝对看起来像您从未激活过任何工作表,因此即使您在后台循环访问WS Array,原始ActiveSheet仍保持不变。 您可能想要退出。在代码中选择.Copy,.Paste,然后直接设置值。它使得更多的工作,并看起来马虎,在后台激活闪烁的所有屏幕。只要发表声明。 表格(sheetname).Cells(iRow,iCol)=您想要设置的值 然后您可以使用iRow和iCol作为变量,并执行各种条件检查和循环。而不是宏观记录的ONE方式。 – peege 2014-10-27 22:12:22
“我认为这是不承认每个工作表的ActiveWorkbook.Worksheets”:这是很好的有一个理论,这可能解释的问题。为什么不向你的循环添加一些代码来显示在每次迭代中ActiveSheet实际上是在变化的呢? – MartynA 2014-10-27 21:50:56
我可以看到它在每次迭代中都没有变化,这就是我为什么这么想的原因。谢谢。 – 2014-10-27 22:07:46