Mam więc szereg danych z kolumny A do J (rzędy mogą się różnić). Potrzebuję mojego makra, aby odebrać dowolną, gdzie wartość komórki w rzędzie A jest albo ignorowana, albo n / a i wyczyść zawartość całego wiersza. Po czym mam VBA usunąć wszystkie puste rzędy. Problem, którego doświadczam, jest to, że VBA nie chce odebrać wartości "# N / A" i usunąć zawartość - jeśli to opuszczę, robi to dokładnie to, co chcę tylko zignorować.

Czy ktoś może pomóc - myślę, że może mieć coś wspólnego z n / a nie zostanie odebrany jako tekst?.

Dziękuję Ci.

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
0
ifeelcrazy123 17 luty 2017, 13:02

2 odpowiedzi

Najlepsza odpowiedź

Jeśli używasz =NA() w komórkach, a następnie #N/A, które widzisz, jest tylko reprezentacją tekstu obiektu błędu. Więc zamiast używać storeval(n) = "#N/A", musisz sprawdzić, czy:

  • Jest to błąd, przy użyciu IsError
  • Jest to błąd na przy użyciu CVErr(xlErrNA)

Oto niewielka funkcja, która da ci prawdziwa jest komórka, która jest NA i FAŁSZ, jeśli nie jest 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

Następnie zadzwoń do IsNa(storeval(n))

3
Foxtrot 17 luty 2017, 10:19

Aby dostrzec "#N/A" Musisz szukać wartości komórki CVErr(xlErrNA)

Możesz także przełączyć swoje If i Or za pomocą 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
2
Shai Rado 17 luty 2017, 10:22