【发布时间】:2015-08-15 04:02:41
【问题描述】:
Sub Macro1()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
Cells.Find(What:="abc", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveCell.Offset(rowOffset:=1, columnOffset:=0).Activate
ActiveCell.Value = "xyz"
Next ws
End Sub
我正在使用以下代码循环遍历 Excel 工作簿中的所有工作表。我想在工作表中查找“abc”。如果我在特定工作表上找到“abc”,我希望将其下方单元格的值设置为“xyz”。 例如,如果在 Worksheet1 的单元格 A2 上找到“abc”,我希望单元格 A3 为“xyz”。同样,如果在 Worksheet2 的单元格 B4 上找到“abc”,我希望单元格 B5 为“xyz”。必须对整个工作簿执行此操作。然而,整个工作簿的循环不会发生,代码只是循环通过 worksheet1。
【问题讨论】:
-
您使用
ActiveCell的方式存在一些问题,可能会导致意外结果,但我看不到任何情况会导致循环无法运行。您是否收到任何类型的错误消息?工作簿中是否有多个工作表? (图表不包含在worksheets集合中) -
我的工作簿中有多个工作表(不包括图表)。正如答案中的 user5228244 所提到的,在工作簿循环中使用 ws.Activate 可以使代码正常工作。