无法从传入的工作表中访问Sub中的单元格

我试图写一个自定义的DeleteRows Sub,我可以从我的代码中的各个点调用,但我遇到了一个问题,我传递的工作表似乎没有任何关联的单元格,运行时出现“types不匹配”错误。 我sorting得到一个特定的值出现在开始,然后循环查看有多less单元格出现,然后删除这些行。

Option Explicit Public Sub DeleteRows(ByRef MySheet As Worksheet, RowsToDelete As Long, ColumnToUse As String, ValueToSearch As String, UseAsInt As Boolean) Dim MyLong As Long If UseAsInt Then 'We are looking for a numeric value MyLong = CLng(ValueToSearch) Do While MySheet.Cells(RowsToDelete, ColumnToUse).Value = MyLong RowsToDelete = RowsToDelete + 1 Loop Else Do While MySheet.Cells(RowsToDelete, ColumnToUse).Value = ValueToSearch RowsToDelete = RowsToDelete + 1 Loop End If If RowsToDelete > 2 Then 'If the row is 2 then no rows were found MySheet.Rows(2 & ":" & RowsToDelete - 1).Delete 'Delete the rows up to the lastRowToDelete minus 1 row(because it started at 2) End If End Sub 

我打电话给另一个小组:

 Dim CurDay as Worksheet Set CurDay = Sheets("Current Day") Call DeleteRows(CurDay, 2, "L","#N/A", False) 

但是,当我在DeleteRows Sub中添加手表到MySheet时,它表示数组中没有单元格,并且出现“types不匹配”错误。 我在哪里错了? 有时来自C#/ VB.Net背景的VBA令人沮丧…

更新:发现我必须检查.Text而不是.Value或.Value2,它的工作原理…

这不是你应该如何比较错误单元格。 当单元格是#N/A您不能将其与其他string或数字进行比较。 您应该首先检查值是否是使用IsError(cel)的错误。

或者,您可以使用.Text属性,该属性在错误的单元格中正常工作,返回"#N/A"string而不是Error Variant

然后,您必须面对将string与数字进行比较的问题。 最简单的方法是,放弃UseAsInt参数; 总是使用一个string,并向.Text属性进行比较。

 Public Sub DeleteRows(ByRef MySheet As Worksheet, RowsToDelete As Long, ColumnToUse As String, ValueToSearch As String) Do While MySheet.Cells(RowsToDelete, ColumnToUse).Text = ValueToSearch RowsToDelete = RowsToDelete + 1 Loop If RowsToDelete > 2 Then 'If the row is 2 then no rows were found MySheet.Rows(2 & ":" & RowsToDelete - 1).Delete 'Delete the rows up to the lastRowToDelete minus 1 row(because it started at 2) End If End Sub