2016-06-01 7 views
2

benötigen eine Funktion, die die erste vollständig leere Zeile (keine Werte, keine Formeln, keine Leerzeichen) aus einem Blatt mit wenig besiedelten Zellen zurückgibt. Keine einzelne Spalte muss ausgefüllt werden.erste vollständig leere Zeile auf einem Blatt finden

Ich habe versucht, aber ich kann es sogar zu kompilieren erhalten:

Public Donations As Worksheet 
Set Donations = Sheets("Sheet2") 

Function getEmptyRow() As Long 
    Dim lastCol As Long, lastRow As Long, maxRow As Long 
    Dim col As Long 
    Dim r As Variant 

    lastCol = Donations.Cells(1, Columns.Count).End(xlToLeft).Column 
    For col = 1 To lastCol Step 1 
     lastRow = Donations.Cells(Rows.Count, col).End(xlUp).row 
     maxRow = Application.WorksheetFunction.max(maxRow, lastRow) 
    Next col 
    getEmptyRow = maxRow + 1 
End Function 

Antwort

3

Mit EntireRow (was mir ist so nützlich, können Sie sagen) und Zeile für Zeile Zählen in A1 beginnend einen sehr einfach Art und Weise der Dies tun.

Dies wird Ihnen in dem sofortigen Fenster sagen:

Sub findemptyrow()      '''Psuedo Code 
Application.ScreenUpdating = False  'turns off annoying blinky 
Range("a1").Activate      'start at beginning 
While a <> 1        'keep going 
    If Application.CountA(ActiveCell.EntireRow) = 0 Then 'is it blank? 
    Debug.Print "Row " & (ActiveCell.Row) & " is blank." 'it is 
    a = 1         'stop going 
    End If 
    ActiveCell.Offset(1).Activate   'next cell 
Wend          'do it all over again 
Application.ScreenUpdating = True   'back to normal settings 
End Sub 

machen ScreenUpdating Falsch wird diese schneller machen, auch mit 10k die Reihen.

0

Die Range.Find method ist wahrscheinlich die zweckmäßigste Methode. Suchen Sie nach einem Platzhalter (What:=Chr(42)), starten Sie in A1 (After:=.Cells(1, 1), suchen rückwärts (SearchDirection:=xlPrevious), suchen zeilenweise (SearchOrder:=xlByRows).Row), schauen Sie sich die Formeln an (LookIn:=xlFormulas), da der erste Wert oder die Formel finden Sie unter xlValues kann nicht korrekt sein, wenn eine Formel ist eine leere Zeichenfolge zurückkehr ("").

Option Explicit 
Public Donations As Worksheet 

Sub test() 
    Set Donations = Worksheets("Sheet2") 
    Debug.Print getNextEmptyRow(Donations) 
End Sub 

Function getNextEmptyRow(ws As Worksheet) 
    With ws.Cells 
     getNextEmptyRow = .Find(What:=Chr(42), After:=.Cells(1, 1), LookIn:=xlFormulas, _ 
           SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row + 1 
    End With 
End Function 

Sie nicht Donations im Deklarationsbereich eines Modulcodeblatt festlegen. den öffentlichen variable Bereich in der Deklarationen Deklarieren (oben) des Codeblatt, aber setzen Sie die Variable in eine Unterklasse oder Funktion

Vergessen Sie nicht, a dd 1 in die Zeile zurückgegeben, wenn Sie die 'nächste leere Zeile' wollen.

+0

Was bin ich? Der What-Parameter der Suchfunktion ist das Zeichen '*' - chr (42), wenn wir nach einer leeren Zelle suchen. –

+0

Wenn Sie unten beginnen und Zeile für Zeile für die erste bevölkerte Zelle nach oben arbeiten, fügen Sie der Zeilennummer 1 hinzu, um die erste leere Zeile zu erhalten. Dies ist nicht unbedingt dasselbe wie von oben zu arbeiten, um die erste leere Zeile zu finden, da es eine vollständig leere Zeile mit untergeordneten Zellen geben könnte. Der Titel deutet auf den letzteren hin, aber der Code des OP suchte nach dem ersten. – Jeeped

0

Nur eine weitere Alternative, um die SpecialCells Methode eines `Bereich mit:

Option Explicit 

Sub Test() 
    Debug.Print "Last row on Sheet1 is: " & FirstCompletelyEmptyRow(Sheet1) 
End Sub 

Function FirstCompletelyEmptyRow(ByRef wsTarget As Worksheet) As Long 
    FirstCompletelyEmptyRow = wsTarget.Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1 
End Function 
Verwandte Themen