Impossible d'accéder aux cellules dans un sous d'une feuille de calcul passée

J'essaie d'écrire un DeleteRows Sub personnalisé que je peux appeler à partir de différents points de mon code, mais je me heurte à un problème où la feuille de travail que je transmet je ne semble pas avoir de cellule associée à ce problème Erreurs "Type Mismatch" lors de l'exécution. Je suis en train de sortinger pour get une certaine valeur pour apparaître au début et ensuite en boucle pour voir le nombre de cellules dans lesquelles il apparaît et ensuite en supprimant ces lignes.

Option Explicit Public Sub DeleteRows(ByRef MySheet As Worksheet, RowsToDelete As Long, ColumnToUse As Ssortingng, ValueToSearch As Ssortingng, 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 

Je l'appelle d'un autre sous:

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

Cependant, lorsque j'ajoute une montre à MySheet dans le DeleteRows Sub, il est dit qu'il n'y a pas de cellules dans le tableau et que je reçois une erreur Type Mismatch. Où me trompe-t-il ici? VBA est tellement frustrant parfois à partir d'un fond C # / VB.Net …

MISE À JOUR: J'ai découvert que je devais vérifier pour .Texte au lieu de .Value ou .Value2 et ça marche …

Ce n'est pas la façon dont vous devriez comparer les cellules d'erreur. Lorsque la cellule est #N/A vous ne pouvez pas la comparer à autre chose comme une string ou un numéro. Vous devez d'abord vérifier si la valeur est une erreur en utilisant IsError(cel) .

Vous pouvez également utiliser la propriété .Text , qui fonctionne bien avec des cellules erronées, en renvoyant une string "#N/A" au lieu d'une Error Variant .

Vous devez alors faire face à la question de comparer les strings aux numbers. UseAsInt facile, déposez le paramètre UseAsInt ; utilisez toujours une string et comparez-vous à la propriété .Text .

 Public Sub DeleteRows(ByRef MySheet As Worksheet, RowsToDelete As Long, ColumnToUse As Ssortingng, ValueToSearch As Ssortingng) 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