Funktionsaufruf in Sub
#1
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
Zitieren to top
#2
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
Gruß
Opa Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Zitieren to top
#3
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.
Zitieren to top
#4
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
Gruß Stefan
Win 7 / Office 2007
[-] Folgende(r) 1 Benutzer sagt Danke an Steffl für diesen Beitrag:
  • Heinz
Zitieren to top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste