2016-12-07 2 views
0

Ich habe ein Problem, bei dem eine bestimmte Spalte in der Mitte für bestimmte Zeilen Leerzeichen enthält. Dies führt den Code:xlDown wählt keine leeren Zellen aus

Range (FieldName.Offset (1), FieldName.End (xlDown)) Wählen Sie

Um nicht alle Zellen ausgewählt, da es in dem Rohling zu stoppen. Zellen und füllen XYZ für die Zellen direkt vor den Leerzeichen.

Ich weiß, dass xlup dieses Problem beheben wird, aber wenn die letzte Zelle des Feldes leer ist, dann wird es diese Zelle nicht ändern und zur nächsten bevölkerten Zelle gehen. Ich bin mir nicht sicher, wie ich meinen Code so modifizieren kann, dass er xlup verwendet und vermeidet, wenn die unteren Zellen in der Spalte leer sind. Ich habe eine Spalte mit dem Namen "ABC", die immer alle Zeilen gefüllt hat, von denen ich vielleicht pingen kann, um sie als die letzte Zeile der gefilterten Daten herauszurufen, aber ich bin mir nicht sicher, wie das geht.

My-Code

Sub SelectDown() 

Dim FieldName As Range 
Dim rng As Range, res As Variant, lrow As Long 

Set rng = ActiveSheet.AutoFilter.Range.Rows(1) 
res = Application.Match("Errors", rng, 0) 

'Finds the Specific Error' 
rng.AutoFilter Field:=res, Criteria1:="*-SHOULD BE XYZ*" 

'Only Shows rows that have something that matches the filter criteria 
lrow = ActiveSheet.Cells(Rows.Count, res).End(xlUp).Row + 1 

If ActiveSheet.Range(Cells(1, res), Cells(lrow, res)).SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then 

    Set FieldName = Range("A1:BZ1").Find("COLUMN NAME") 

    'If field isnt present shows message 
    If FieldName Is Nothing Then 
     MsgBox "Field Name was not found." 
    End If 

    'Changes the Selection to XYZ if there is a change present 
    Range(FieldName.Offset(1), FieldName.End(xlDown)).Select 
    Selection.FormulaR1C1 = "XYZ" 
    'Changes the Color of the fields changed to Yellow 
    With Selection.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .Color = 65535 
    End With 
Else 
End If 

End Sub 
+0

müssen Sie alle Linien setzen, beginnend mit 'Range (FieldName.Offset (1), FieldName.End (xlDown)). Select' am' Else' Abschnitt 'Wenn Field Is Nothing Then' , um sicherzustellen, dass die 'Find' Methode zum Finden von' FieldName' erfolgreich war. –

Antwort

1

könnten Sie diesen Code verwenden.
Verwenden Sie Set FieldName = Range("A1:BZ1").Find("COLUMN NAME"), um die Spaltennummer zu finden (sofern sie NICHT NOTHING ist), und geben Sie diese als optionale Spaltennummer an.

Public Function LastCell(wrkSht As Worksheet, Optional Col As Long = 0) As Range 

    Dim lLastCol As Long, lLastRow As Long 

    On Error Resume Next 

    With wrkSht 
     If Col = 0 Then 
      lLastCol = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column 
      lLastRow = .Cells.Find("*", , , , xlByRows, xlPrevious).Row 
     Else 
      lLastCol = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column 
      lLastRow = .Columns(Col).Find("*", , , , xlByColumns, xlPrevious).Row 
     End If 

     If lLastCol = 0 Then lLastCol = 1 
     If lLastRow = 0 Then lLastRow = 1 

     Set LastCell = wrkSht.Cells(lLastRow, lLastCol) 
    End With 
    On Error GoTo 0 

End Function 
+0

Hallo, ich bin mir nicht sicher, wo dies in den vorhandenen Code eingefügt werden soll und ob dies alle in der Spalte (Feld) einschließlich Leerzeichen am Ende der Spalte ausgewählt wird? – MrLockett

+0

Fügen Sie den Code als neue Funktion hinzu. Erstellen Sie eine Bereichsvariable in der 'SelectDown'-Prozedur - z. 'Dim rLastCell als Range'. Ersetzen Sie das 'End If' nach Ihrer' MsgBox' durch 'Else' und das' Else' am unteren Rand Ihres Codes durch 'End If'. Fügen Sie nun nach der 'Else'-Anweisung diese Codezeile hinzu: 'Setzen Sie rLastCell = LastCell (ActiveSheet, FieldName.Column)' und ändern Sie 'Range (FieldName.Offset (1), FieldName.End (xlDown)). Wählen Sie' to 'Range (FieldName.Offset (1), rLastCell.Row) .Wählen Sie'. Ich werde nicht auf das ganze Ausweichen mit 'Select' eingehen. –

+0

Hallo, ich habe den Code als solchen geändert und bekomme jetzt einen Laufzeitfehler 1004: Method Range of Object Global Failed. für die Zeile 'Range (FieldName.Offset (1), rLastCell.Row) .Wählen Sie 'Ich setze die Funktion zuerst, dann eine Pause, dann folgt der Sub. Ich habe die Änderungen mit dem else und dem Code gemacht und das passiert. Nicht sicher, was ich falsch mache. – MrLockett

Verwandte Themen