我正在尝试对列中的某些单元格进行计数,直到达到特定值,然后删除该特定值之前的整个列范围。
我将此代码放入循环中,以将其应用于工作簿中的所有工作表。
我收到错误
运行时错误 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
会发生错误,例如当
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