如何在不主动选择每个工作表的情况下 运行 多个工作表中的方法

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 在您通过外循环时发生变化。