Clever-Excel-Forum

Normale Version: Funktionsaufruf in Sub
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Code:
Public Function LastRow(wks As Worksheet) As Long
   Dim lngFirst As Long, lngLast As Long, lngTmp As Long

   With Application
       If .CountA(wks.Cells) = 0 Then Exit Function
       If .CountA(wks.Rows(wks.Rows.Count)) Then
           LastRow = wks.Rows.Count: Exit Function
       End If
       lngLast = wks.Rows.Count
       Do While lngLast > lngFirst + 1
           lngTmp = (lngFirst + lngLast) \ 2
           If .CountA(wks.Rows(lngTmp).Resize(lngLast - lngTmp)) Then _
              lngFirst = lngTmp Else lngLast = lngTmp
       Loop
       If .CountA(wks.Rows(lngLast)) Then LastRow = lngLast Else LastRow = lngFirst
   End With
End Function

Hallo!
Ich würde gern in einem Sub die oben angegebene Funktion öffnen, um die letzte beschriebene Zeile in der Tabelle zu finden.
Dazu müsste die Funktion die Nummer der letzten beschriebenen Zeile zurückgeben und die Funktion müsste aufgerufen werden.
Leider bekomme ich bei folgendem Code im Sub eine Fehlermeldung:
Code:
Public Sub CommandButton1_Click()

Dim LRow As Long

   
   LRow = LastRow()
   
   Tabelle1.Cells(LastRow, 3) = TextBox1.Text
   Tabelle1.Cells(LastRow, 8) = TextBox2.Text
   
   
End Sub
Hi,

Deine Funktion erwartet immer einen Parameter, den gibst Du aber nicht mit.

Einmal googeln bringt das:

http://www.excel-inside.de/vba-loesungen...-ermitteln
Richtig, aber welchen Parameter erwartet die Funktion? Das konnte ich aus dem Kopf nicht ablesen.

Die anderen Lösungen, um die letzte Zeile zu ermitteln habe ich bereits getestet. Leider finden diese immer das zuletzt veränderte Feld, also auch Formatänderungen, welches für meine Anwendung die falschen Ergebnisse liefert.
Hallo Heinz,

die Funktion erwartet ein Worksheet. Das steht doch im Parameter der Funktion drin.

Code:
Public Function LastRow(wks As Worksheet) As Long

Die Übergabe geht so

Code:
Public Sub CommandButton1_Click()

Dim LRow As Long

  
   LRow = LastRow(Tabelle1)
  
   Tabelle1.Cells(LastRow, 3) = TextBox1.Text
   Tabelle1.Cells(LastRow, 8) = TextBox2.Text
  
  
End Sub