如何在不主动选择每个工作表的情况下 运行 多个工作表中的方法
How to run a method in multiple worksheets without actively selecting each one
我在 VBA 中编写一些代码时遇到问题,这些代码将 运行 一个活动工作簿中所有 sheet 的宏,而不 'manually' 选择 [每次 =17=]s 然后 运行 再次使用该方法。我目前的情况如下:
sub NhlStatsHighlighter()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
With ws
For Each cell In ActiveSheet.UsedRange.Cells
If IsNumeric(cell) And Not IsEmpty(cell) Then
If cell.Value < 0 Then
cell.Interior.Color = rgbRed
ElseIf cell.Value = 0 Then
cell.Interior.Color = rgbGray
ElseIf cell.Value > 0 Then
cell.Interior.Color = rgbLightBlue
End If
End If
Next
End With
Next ws
这仅适用于第一个(活动)sheet。我不太确定我做错了什么。我尝试了其他方法,但我 运行 遇到了同样的问题。
您的问题是您使用的是 ActiveSheet 而不是 ws。 ActiveSheet 是用户 select 的当前表格。它不会更新,您不应该 select 代码表。如果你这样做只是时间问题,如果你会得到一个运行时异常。
Dim ws As Worksheet
Dim cell as Range
For Each ws In ActiveWorkbook.Worksheets
For Each cell in ws.UsedRange.Cells
` More stuff here
Next
Next
您也不需要 with 块。它在这里没有做任何事情。
您正在构造一个 With ws / End With
但没有为 UsedRange
的父级利用它。
sub NhlStatsHighlighter()
Dim ws As Worksheet, rng as range
For Each ws In ActiveWorkbook.Worksheets
With ws
For Each rng In .UsedRange.Cells
If IsNumeric(rng) And Not IsEmpty(rng) Then
If rng.Value < 0 Then
rng.Interior.Color = rgbRed
ElseIf rng.Value = 0 Then
rng.Interior.Color = rgbGray
ElseIf rng.Value > 0 Then
rng.Interior.Color = rgbLightBlue
End If
End If
Next
End With
Next ws
end sub
注意 .UsedRange.Cells
。前缀句点(又名 .
或 句点 )使父 ws 在您通过外循环时发生变化。
我在 VBA 中编写一些代码时遇到问题,这些代码将 运行 一个活动工作簿中所有 sheet 的宏,而不 'manually' 选择 [每次 =17=]s 然后 运行 再次使用该方法。我目前的情况如下:
sub NhlStatsHighlighter()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
With ws
For Each cell In ActiveSheet.UsedRange.Cells
If IsNumeric(cell) And Not IsEmpty(cell) Then
If cell.Value < 0 Then
cell.Interior.Color = rgbRed
ElseIf cell.Value = 0 Then
cell.Interior.Color = rgbGray
ElseIf cell.Value > 0 Then
cell.Interior.Color = rgbLightBlue
End If
End If
Next
End With
Next ws
这仅适用于第一个(活动)sheet。我不太确定我做错了什么。我尝试了其他方法,但我 运行 遇到了同样的问题。
您的问题是您使用的是 ActiveSheet 而不是 ws。 ActiveSheet 是用户 select 的当前表格。它不会更新,您不应该 select 代码表。如果你这样做只是时间问题,如果你会得到一个运行时异常。
Dim ws As Worksheet
Dim cell as Range
For Each ws In ActiveWorkbook.Worksheets
For Each cell in ws.UsedRange.Cells
` More stuff here
Next
Next
您也不需要 with 块。它在这里没有做任何事情。
您正在构造一个 With ws / End With
但没有为 UsedRange
的父级利用它。
sub NhlStatsHighlighter()
Dim ws As Worksheet, rng as range
For Each ws In ActiveWorkbook.Worksheets
With ws
For Each rng In .UsedRange.Cells
If IsNumeric(rng) And Not IsEmpty(rng) Then
If rng.Value < 0 Then
rng.Interior.Color = rgbRed
ElseIf rng.Value = 0 Then
rng.Interior.Color = rgbGray
ElseIf rng.Value > 0 Then
rng.Interior.Color = rgbLightBlue
End If
End If
Next
End With
Next ws
end sub
注意 .UsedRange.Cells
。前缀句点(又名 .
或 句点 )使父 ws 在您通过外循环时发生变化。