2017-02-17 5 views
0

J'ai donc une plage de données de la colonne A à J (les lignes peuvent varier). Ce que j'ai besoin de ma macro est de ramasser n'importe où la valeur de la cellule dans la ligne a est IGNORE ou # N/A et effacer le contenu de la ligne entière. après quoi j'ai VBA supprimer toutes les lignes vides. Le problème que je rencontre est que VBA ne veut pas ramasser la valeur "# N/A" et effacer le contenu - si je laisse cela, il fait exactement ce que je veux avec seulement IGNORE.Ma macro ne récupère pas la valeur "# N/A" pour effacer le contenu

S'il vous plaît quelqu'un peut aider - je pense que cela peut avoir quelque chose à voir avec N/A ne pas être pris en tant que texte ?.

Merci.

Dim end_range As Double 
Dim n As Double 

'Set the range in which to search for Ignore 

Sheets("Submit").Select 
Range("A1").End(xlDown).Select 
end_range = ActiveCell.Row 

'Store the values of in a range 
ReDim storeval(end_range) 

For n = 1 To end_range 
    storeval(n) = Range(Cells(n, 1), Cells(n, 1)).Value 
    Range(Cells(n, 2), Cells(n, 2)).Value = storeval(n) 
Next n 

'Delete the entirerow if the value contains ignore or N/A 
For n = 1 To end_range 
    If storeval(n) = "IGNORE" Or storeval(n) = "#N/A" Then 
    Range("A" & n).EntireRow.ClearContents 
    End If 
Next n 

Sheets("Submit").Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

Répondre

3

Si vous utilisez =NA() dans vos cellules, le #N/A que vous voyez est juste une représentation de texte d'un objet d'erreur. Ainsi, au lieu d'utiliser le storeval(n) = "#N/A", vous devez vérifier si:

  • est une erreur, en utilisant IsError
  • est l'erreur NA en utilisant CVErr(xlErrNA)

Voici une petite fonction qui vous donner vrai est la cellule est NA et faux si ce n'est pas NA:

Function IsNa(value) 
    If Not IsError(value) Then 
     IsNa = False 
    ElseIf value = CVErr(xlErrNA) Then 
     IsNa = True 
    Else 
     IsNa = False 
    End If 
End Function 

Ensuite, il suffit de l'appeler par IsNa(storeval(n))

+0

Vous avez bien compris. –

+0

Désolé pour la question stupide, mais où dans mon code puis-je l'appeler? – ifeelcrazy123

+0

'Si storeval (n) =" IGNORE "ou IsNa (storeval (n)) Then' –

2

à la tache "#N/A" vous devez rechercher la valeur de la cellule CVErr(xlErrNA)

Vous pouvez également changer votre If et Or avec Select Case

For n = 1 To end_range 
    Select Case storeval(n) 
     Case "IGNORE", CVErr(xlErrNA) 
      Range("A" & n).EntireRow.ClearContents 
    End Select 
Next n 
+0

J'ai supprimé mon post, et je pense que nous sommes allés tous les deux trop vite, erreur d'exécution si la cellule est erronée. –

+0

Merci pour cela, cependant quand j'insère la fonction de cas où le si serait il me donne le type d'erreur discordance. Aussi, juste une question rapide. Le # N/A que j'ai dans mes cellules est à cause des erreurs de formule précédentes, mais dans la feuille que je regarde, elles sont collées en tant que valeur (format de cellule général). Est-ce que le CvErr (xlErrNA) les prendrait encore? – ifeelcrazy123