VBA循环问题。 只适用于当前标签

我正在寻找与Excel中的VBA方式循环通过电子表格。 我发现很多网站都提出了使用范围函数的build议,但没有具体的解决我所遇到的问题。 macros只能在当前选项卡上工作。 它不会循环。

Sub UpdateAll() ' ' UpdateAll Macro ' Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets Call Update_OI Next ws End Sub Sub Update_OI() ' ' Update_OI Macro Dim rng As Range For Colx = 3 To 81 Cells(10, Colx).Select If ActiveCell.Offset(-8, 0) = "X" Then GoTo 4 If ActiveCell.Offset(-3, 0) = 0 Then GoTo 4 If ActiveCell.Value = vbNullString Then GoTo 4 If ActiveCell.Value <> vbNullString Then GoTo 1 1 goalvalue = Cells(70, Colx).Value Range(Cells(69, Colx), Cells(69, Colx)).GoalSeek Goal:=goalvalue, ChangingCell:=Range(Cells(10, Colx), Cells(10, Colx)) 4 Next Colx End Sub 

如下更改您的更新。 它应该现在工作。

 Sub UpdateAll() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets ws.Select Call Update_OI Next ws End Sub 

您可以将表单对象传递给Update_OI ,并尽量使用Select / Activate – 您几乎总是可以避免这种情况,这样做会使代码更加健壮。

 Sub UpdateAll() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets Update_OI ws Next ws End Sub Sub Update_OI(ws as Worksheet) Dim rng As Range, Colx As Long For Colx = 3 To 81 Set rng = ws.Cells(10, Colx) If rng.Offset(-8, 0).Value <> "X" And _ rng.Offset(-3, 0).Value <> 0 And _ Len(rng.Value) > 0 Then goalvalue = ws.Cells(70, Colx).Value ws.Cells(69, Colx).GoalSeek Goal:=goalvalue, _ ChangingCell:=ws.Cells(10, Colx) End If Next Colx End Sub 

下面的代码工作

 Public Sub main() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets ws.Cells(1, 2).Value = 11111 Next ws End Sub 

尝试改变

 Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets Call Update_OI Next ws 

 Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets Call Update_OI Next ws 

还是只是复制粘贴格式化问题。 在这种情况下,我将删除我的答案,因为它没有答案:)。