2017-02-17 3 views
0

So habe ich einen Bereich von Daten von Spalte A bis J (Zeilen können variieren). Was ich brauche, um mein Makro zu machen, ist, wo der Zellenwert in Zeile a entweder IGNORE oder # N/A ist und den Inhalt der gesamten Zeile zu löschen. Danach habe ich VBA löschen alle leeren Zeilen. Das Problem, das ich erfahre, ist, dass VBA den "# N/A" -Wert nicht aufheben und den Inhalt löschen möchte - wenn ich das weglasse, macht es genau das, was ich nur mit IGNORE will.Mein Makro nimmt den Wert "# N/V" nicht auf, um den Inhalt zu löschen

Bitte kann mir jemand helfen - ich denke, es könnte etwas mit N/A zu tun, nicht als Text aufgenommen wird ?.

Vielen Dank.

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 

Antwort

3

Wenn Sie =NA() in Ihre Zellen verwenden, dann die #N/A, die Sie sehen, ist nur eine Textdarstellung eines Fehlerobjekt. Anstatt also die storeval(n) = "#N/A" zu verwenden, müssen Sie prüfen, ob:

  • es ein Fehler ist, IsError
  • mit es ist der Fehler NA CVErr(xlErrNA)

verwendet, ist hier eine kleine Funktion, wird Sie gelten die Zelle NA und falsch, wenn es nicht 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 

Dann rufen Sie einfach es von 012.

+0

Sie es brauchen suchen bekam Recht. –

+0

Sorry für die dumme Frage, aber wo in meinem Code nenne ich es? – ifeelcrazy123

+0

'Wenn storeval (n) =" IGNORE "Oder IsNa (storeval (n)) Dann ' –

2

zu beschmutzen "#N/A" Sie Zelle Wert CVErr(xlErrNA)

Sie könnten auch wechseln möchten Ihre If und Or mit 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

Ich habe meinen Beitrag gelöscht, und ich denke, wir beide gingen zu schnell, Laufzeitfehler, wenn die Zelle fehlerhaft ist. –

+0

Danke dafür, aber wenn ich die Case-Funktion einfügen, wo das wäre wäre es gibt mir den Fehlertyp Mismatch. Auch, nur eine kurze Frage. Die # N/A, die ich in meinen Zellen habe, sind wegen vorheriger Formelfehler, aber in dem Blatt, das ich betrachte, werden sie als Wert eingefügt (Zellenformat allgemein). Würde der CvErr (xlErrNA) sie immer noch aufnehmen? – ifeelcrazy123

Verwandte Themen