0

我有下面的代码来格式化一张表。此工作簿中有多个工作表,因此我只想对第一个工作表执行操作。但是,如果我有除第一个激活之外的任何工作表(例如第二个),则代码会引发 1004 错误。我不确定为什么要指定和定义目标工作表。

Option Explicit

Sub SelectByJobNumber()
    Dim LastRow As Long
    Dim OperatingRow As Variant
    Dim CountOfMatching As Long
    
    Dim WB As Worksheet
    Set WB = ThisWorkbook.Worksheets(1)
    
    LastRow = WB.Cells(ActiveSheet.Rows.Count, "C").End(xlUp).Row
    
        WB.Range(Cells(LastRow + 2, 19), Cells(LastRow + 2, 22)).Formula = "=" & "Sum(S74:S" & LastRow & ")"
        WB.Range(Cells(LastRow + 2, 19), Cells(LastRow + 2, 22)).NumberFormat = "$#,##0.00"
    
    For OperatingRow = 74 To LastRow
        
        If WB.Cells(OperatingRow, 3) = WB.Cells(OperatingRow + 1, 3) Then

            CountOfMatching = CountOfMatching + 1

        Else
            
                WB.Range(Cells(OperatingRow - CountOfMatching, 3), Cells(OperatingRow, 21)).BorderAround ColorIndex:=1, Weight:=xlMedium
                WB.Cells(OperatingRow - CountOfMatching, 22) = Application.Sum(Range(Cells(OperatingRow - CountOfMatching, 21), Cells(OperatingRow, 21)))
                
                If WB.Cells(OperatingRow - CountOfMatching, 22) = 0 Then
                    WB.Cells(OperatingRow - CountOfMatching, 23) = "Text for Zero Total Payable"
                Else
                    WB.Cells(OperatingRow - CountOfMatching, 23) = "Not Paid"
                End If
                
                WB.Cells(OperatingRow - CountOfMatching, 22).NumberFormat = "$#,##0.00"

            CountOfMatching = 0
            
        End If
        
    Next OperatingRow
    
    If WB.Cells(LastRow + 2, 21) = WB.Cells(LastRow + 2, 22) Then
        WB.Range(Cells(LastRow + 2, 21), Cells(LastRow + 2, 22)).BorderAround ColorIndex:=4, Weight:=xlMedium
    Else
        WB.Range(Cells(LastRow + 2, 21), Cells(LastRow + 2, 22)).BorderAround ColorIndex:=3, Weight:=xlMedium
    End If

End Sub

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

4

原因是在这样的代码中:

 WB.Range(Cells(LastRow + 2, 19), Cells(LastRow + 2, 22))

该对象Cells不合格,因此默认为ActiveWorkbook.ActiveSheet.Cells(). 虽然感觉很愚蠢,因为您已经限定了Range()作为Cells()参数的参数,但这些参数是它们自己的对象,也必须是限定的。

改为考虑:

With WB
   .Range(.Cells(LastRow + 2, 19), .Cells(LastRow + 2, 22))
End With

WB.或者,如果感觉更干净,您可以单独对它们进行限定。

于 2022-01-20T15:06:48.063 回答