计算列中的某些单元格直到达到特定值,然后删除单元格

问题描述 投票:0回答:1

我正在尝试对列中的某些单元格进行计数,直到达到特定值,然后删除该特定值之前的整个列范围。

我将此代码放入循环中,以将其应用于工作簿中的所有工作表。

我收到错误

运行时错误 1004“应用程序定义或对象定义的错误”

在 Do While 语句中

Public Function StringFormat(ByVal mask As String, ParamArray tokens()) As String
 
    Dim i As Long
    For i = LBound(tokens) To UBound(tokens)
        mask = Replace(mask, "{" & i & "}", tokens(i))
    Next
    StringFormat = mask
 
End Function


Sub delcol()

Dim ac As Integer
Dim j As Long
Dim a As Long

'counting the worksheets

ac = Application.Worksheets.Count

'looping through the worksheets

For i = 1 To ac

    Worksheets(i).Activate
    
    j = 1
    a = 0

'counting the no of rows until value - "Empcode" occurs

        Do While Cells(j, 3).Value <> "Empcode"

            a = a + 1
            j = j + 1
    
        Loop

    Range(StringFormat("a1:a{0}", a)).EntireRow.Delete

Next i

End Sub
excel vba
1个回答
1
投票

删除列中匹配字符串上方的行

  • 会发生错误,例如当

    Empcode
    未找到时。然后您的代码将一直运行,直到无法读取不存在的单元格
    C1048577

  • 另一个问题是您的比较区分大小写,例如

    Empcode
    <>
    EmpCODE
    。要使比较不区分大小写,您可以使用
    StrComp
    函数:

    If StrComp(CStr(Cells(j, 3).Value), "Empcode", vbTextCompare) = 0 Then
    

    请注意,使用

    Application.Match
    时的比较不区分大小写,如以下代码所示。

改进

Option Explicit

Sub DeleteTopRows()

    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    
    Dim ws As Worksheet, RowIndex As Variant
    
    For Each ws In wb.Worksheets
        RowIndex = Application.Match("Empcode", ws.Columns("C"), 0)
        If IsNumeric(RowIndex) Then ' found
            If RowIndex > 1 Then ' not found in the first row
                ws.Rows("1:" & RowIndex - 1).Delete
            End If
        End If
    Next ws

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.