Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1204to1208
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

1. freie Zeile trotz Autofilter finden

1. freie Zeile trotz Autofilter finden
Dietmar
Hallo zusammen,
mit folgendem (erkennbar umständlichem) Code übertrage ich Daten in eine Endlos-Tabelle zwecks durchzuführender Auswertungen.
Die Daten aus A28:Z28 resultieren aus Verknüpfungen von anderen Sheets, die ich auf dem Umweg der Umwandlung in Werte in Zeile 30 eintrage (ich weiß, es ist umständlich, geht aber ohne Probleme).
Danach erfolgt der Eintrag in die 1. freie Zeile (nach Zeile 32)
Ab Zeile 32 sind Überschriften mit Autofilter-Dreicken.
Mein Problem:
Alles funktioniert einwandfrei solange der Autofilter nicht gesetzt ist.
Meine Frage:
Wie kann ich es per VBA erzwingen, dass trotz (filterbedingter ausgeblendeter Zeilen) die TATSÄCHLICH erste freie Zeile ohne Werte gefunden und befüllt wird?
Sub TagesergebnisInStatistik()
Application.EnableEvents = False
With Worksheets("Statistik")
.Unprotect Password:="123"
.Range("A28:Z28").Copy
.Range("A30").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
.Range("A30:Z30").Copy
.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial Paste:= _
xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
.Protect Password:="123"
End With
Application.CutCopyMode = False
Application.EnableEvents = True
End Sub
Herzlichen Dank vorab!
Dietmar aus Aachen

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: 1. freie Zeile trotz Autofilter finden
21.03.2011 16:52:28
Ralf_P
Hallo Dietmar,
Sub TagesergebnisInStatistik()
Application.EnableEvents = False
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
With Worksheets("Statistik")
.Unprotect Password:="123"
.Range("A28:Z28").Copy
.Range("A30").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
.Range("A30:Z30").Copy
.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial Paste:= _
xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
.Protect Password:="123"
End With
Application.CutCopyMode = False
Application.EnableEvents = True
End Sub
Kannst ja danach den Filter wieder setzen.
VG, Ralf
Anzeige
geht leider nicht ...
21.03.2011 21:50:59
Dietmar
Hallo Ralf,
vielen Dank !
01
Der Code funktioniert leider nicht, (vermutlich) da ich den Datenübertrragungsbefehle nicht vom gleichen Sheet aus aurufe, sondern per Steuerelement von einem anderen Tabellenblatt, in welchem die Daten in einem Formular erfasst werden.
02
ferner suche ich einen Code, der die letzte freie Zeile TROTZ bestehendem Filter findet (wenn's das gibt) und befüllt.
Hast Du noch eine Idee?
Viele Grüße
Dietmar aus Aachen
AW: geht leider nicht ...
22.03.2011 13:37:25
Rudi
Hallo,
letzte Zeile auch bei Filter:
Function LastRow( _
wks As Worksheet, _
Optional lngFirstRow As Long, _
Optional lngLastRow As Long) _
As Long
Dim lngTmp As Long, blnFound As Boolean
With Application
If .CountA(wks.Rows(wks.Rows.Count)) Then
LastRow = wks.Rows.Count: Exit Function
End If
If .CountA(wks.Cells) = 0 Then
LastRow = 0: Exit Function
End If
If lngFirstRow = 0 Then lngFirstRow = 1
If lngLastRow = 0 Then lngLastRow = wks.Rows.Count
lngTmp = (lngFirstRow + lngLastRow) / 2
If lngLastRow > lngFirstRow + 1 Then
If .CountA(wks.Range(.Rows(lngTmp), .Rows(lngLastRow))) Then _
lngFirstRow = lngTmp: blnFound = True
If Not blnFound And .CountA(wks.Range(.Rows(lngFirstRow), .Rows(lngTmp))) Then _
lngLastRow = lngTmp
LastRow wks, lngFirstRow, lngLastRow
End If
End With
LastRow = lngFirstRow
End Function

Gruß
Rudi
Anzeige
Ja, das funktioniert gut, dennoch: Frage
23.03.2011 19:47:14
Dietmar
Hallo Rudi,
vielen Dank!
ja so geht's ! Das interessante ist, dass der Autofilter auch bestehen bleibt.
Es scheint so zu sein, dass der Code hinter die zuletzt gefiltertete Zeile eine neue Zeile einfügt und dort die Daten dann hineinschreibt.
Das führt allerdings dazu, dass nicht die wirklich letzte freie Zeile gesucht und gefunden wird, sondern die Werte werden quasi dazwischen geschrieben.
Ist nicht weiter schlimm, aber falls es möglich ist: Ergänzungsfrage: Lässt der Code sich so anpassen, dass die neu zu übertragenden Werte in die WIRKLICH letzte freie Zeile eingefügt werden.Oder ist da nur möglich, wenn vorher der Filter komplett rausgenommen wird?
Vielen Dank nochmals und
Liebe Grüße
Dietmar aus Aachen
Anzeige
verstehe ich nicht
23.03.2011 21:53:02
Rudi
Hallo,
die Funktion ermittelt die letzte Zeile mit Inhalt, nicht die letzte freie.
Sowas funktioniert bei mir auch in einer gefilterten Tabelle einwandfrei:

Sub xxx()
Dim lLast As Long
lLast = LastRow(Sheets(1)) + 1
Cells(lLast, 1) = "xxy"
End Sub

Gruß
Rudi

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige