Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1356to1360
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

letzte Zeile in Spalte bei Fixierung

letzte Zeile in Spalte bei Fixierung
01.05.2014 20:52:54
Tino
Hallo,
in der Regel beantworte ich hier Fragen, nun habe ich mal eine!
Wie ermittelt ihr die letzte Zeile in einer bestimmten Spalte wenn diese fixiert ist?
Wenn ich in einer Spalte die letzte Zelle ermitteln möchte, mache ich dies idR. mit …Cells(.rows.count,1).end(xlup).row
Nun wenn die Tabelle ab einer bestimmten Zeile fixiert ist und der Benutzer
den benutzten Bereich außerhalb den sichtbaren Bereich bringt
wird die Falsche Zeile zurückgegeben.
Dies habe ich nun so gelöst
Dim varRow
With Tabelle1.UsedRange.EntireRow
varRow = ExecuteExcel4Macro("LOOKUP(2,1/(" & _
.Columns(1).Address(ReferenceStyle:=xlR1C1, External:=True) & _
"""""),ROW(" & .Columns(1).Address(ReferenceStyle:=xlR1C1, External:=True) & _
"))")
End With
If Not IsNumeric(varRow) Then varRow = 1

Gruß Tino

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: letzte Zeile in Spalte bei Fixierung
01.05.2014 21:14:01
Hajo_Zi
Hallo, Tino,
hier mal ein Ansartz bei Autfilter oder ausgeblendeten Zeile. Vielleicht hilft es.
Es müsste nur in der neuen Application die Fixierung aufgehoben werden.

' ************************************************************* _
'  Modul:  mdl_Stefan_Giehrl  Typ = Allgemeines Modul
' **************************************************************
Option Explicit        _
' Variablendefinition erforderlich
Function LetzteZeile(Pruefspalte As String)
Application.ScreenUpdating = False
ActiveWorkbook.CustomViews.Add ViewName:="Temp" _
span>, PrintSettings:=True, _
RowColSettings:=True
With Cells
.EntireRow.Hidden = False
.EntireColumn.Hidden = False
End With
LetzteZeile = IIf(IsEmpty(Cells(Rows.Count, Pruefspalte)), Cells( _
Rows.Count, Pruefspalte).End(xlUp).Row, Rows.Count)
ActiveWorkbook.CustomViews("Temp"). _
Show
ActiveWorkbook.CustomViews("Temp"). _
Delete
Application.ScreenUpdating = True
End Function
Sub Stefan_Giehrl()
MsgBox "letzte gefüllte Zeile " &  _
LetzteZeile("A"), 48, "Stefan Giehrl"
End Sub
' von Stefan Giehrl
' Veränderung letzte Zeile, With Ergänzung Hajo Ziplies



' **************************************************************
' Modul: mdl_Josef_Ehrensberger Typ = Allgemeines Modul
' **************************************************************

Option Explicit ' Variablendefinition erforderlich
Sub Josef_Ehrensberger()
Dim lngFirstFree As Long, lngRealFirstFree As Long
lngFirstFree = Cells(Rows.Count, 1).End(xlUp).Row + 1
lngRealFirstFree = firstEmpty(Range("A:A"))
' noch Prüfung ob Ergebinis Funktion = 0 dann ist keine Zeile mehr frei
' Vergleich Ergänzung Hajo Ziplies
If CStr(lngRealFirstFree) = 0 Then
MsgBox "erste freie Zelle mit .End(xlup) = " & vbTab & CStr(lngFirstFree) & vbLf & _
"mit Funktion es ist keine Zeile mehr frei.", 48, "Josef Ehrensberger"
Else
MsgBox "erste freie Zelle mit .End(xlup) = " & vbTab & CStr(lngFirstFree) & vbLf & _
"erste freie Zelle mit Funktion = " & vbTab & CStr(lngRealFirstFree), 48, "Josef Ehrensberger"
End If
End Sub
Private Function firstEmpty(ByRef RNG As Range, Optional ByVal Row0_Or_Col1 As Integer = 0) As Long
Dim scrUPD As Boolean
On Error Resume Next
scrUPD = Application.ScreenUpdating ' Zustand Bildschirmaktualisierung merken
Application.ScreenUpdating = False
With RNG
.Parent.Parent.CustomViews.Add ViewName:="xyzxyz", _
PrintSettings:=False, RowColSettings:=True
If .Parent.AutoFilterMode Then .Parent.ShowAllData
If Row0_Or_Col1 = 0 Then
firstEmpty = .Find(what:="*", _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row + 1
If firstEmpty > .Parent.Rows.Count Then firstEmpty = 0
Else
firstEmpty = .Find(what:="*", _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column + 1
If firstEmpty > .Parent.Columns.Count Then firstEmpty = 0
End If
With .Parent.Parent.CustomViews("xyzxyz")
.Show
.Delete
End With
End With
Application.ScreenUpdating = scrUPD ' Zustand Bildschirmaktualisierung zurück
End Function
' von Josef Ehrensberger

Anzeige
AW: letzte Zeile in Spalte bei Fixierung
01.05.2014 21:27:25
Tino
Hallo Hajo,
danke erst mal für deine Antwort.
Die Find * Funktion kenne ich, hat aber den Nachteil das diese die aktuelle Ansicht verstellt.
Dies möchte ich eigentlich vermeiden!
Gruß Tino

letzte Zeile in Spalte bei Fixierung
01.05.2014 21:22:17
Matthias
Hallo Tino
Zitat

Nun wenn die Tabelle ab einer bestimmten Zeile fixiert ist und der Benutzer
den benutzten Bereich außerhalb den sichtbaren Bereich bringt

Setz doch einfach ein ScrollArea
z.B.
Tabelle1.ScrollArea = "A1:B5"

dann kann der Benutzer doch den Bereich nicht verlassen.
Oder hab ich was falsch verstanden?
Gruß Matthias

Anzeige
AW: letzte Zeile in Spalte bei Fixierung
01.05.2014 21:31:33
Tino
Hallo Matthias,
danke für Deine Antwort!
Der Benutzer darf ja in der Tabelle scrollen
aber die Überschrift soll immer sichtbar bleiben (zwecks Lesbarkeit)!
Die aktuelle Ansicht möchte ich nicht verstellen!
Gruß Tino

hier ein Beispiel was ich meine...
01.05.2014 21:50:06
Tino
Hallo,
hier ein Beispiel wenn der letzte Eintrag aus Spalte A nicht mehr sichtbar ist
soll dennoch die richtige Zeile ausgeben werden.
Eine Lösung habe ich ja, aber vielleicht gibt es etwas Einfacheres wie in etwa der ein Zeiler mit xlup.
https://www.herber.de/bbs/user/90431.xls
Gruß Tino

Anzeige
AW: hier ein Beispiel was ich meine...
01.05.2014 22:00:04
Matthias
Hallo Tino
Es wird doch immer (egal wo ich mich befinde)
die richtige Zeile (17) angezeigt.
Was versteh ich da nicht?
Gruß Matthias

ich suche eine bessere einfachere Lösung!
01.05.2014 22:06:51
Tino
Hallo,
wie im Anfang geschrieben, möchte ich wissen wie ihr so etwas lösen würdet.
Evtl. eine bessere/einfachere Variante wie die von mir!
Gruß Tino

Lösung zu was für einem Problem?
01.05.2014 22:52:15
EtoPHG
Hallo Tino,
Zitat: Nun wenn die Tabelle ab einer bestimmten Zeile fixiert ist und der Benutzer
den benutzten Bereich außerhalb den sichtbaren Bereich bringt wird die Falsche Zeile zurückgegeben.

Das stimmt für deine XL4-Makro Version. Nicht aber für die 'Standard' ....End(xlup) Methode.
Ich kann das Problem auch nach 10x Durchlesen nicht nachvollziehen.
Gruess Hansueli

Anzeige
ist das so schwer zu verstehen was ich schreibe?
01.05.2014 23:04:13
Tino
Hallo,
die Verständnis Frage kann ich nicht nachvollziehen.
Ich suche eine VBA-Funktionon die einfacher ist wie meine,
die die letzte Zeile in Spalte A ausgibt auch wen diese nicht im sichtbaren Bereich liegt.
Gruß Tino

Beide Versionen ergeben 17!!!! (owT)
01.05.2014 23:55:27
EtoPHG

welche beide, es gibt zZ. nur eine? oT.
02.05.2014 00:07:11
Tino

AW: Letzte Zeile
02.05.2014 00:29:32
Gerd
Hallo Tino,
hast du keine Lücken, kannst du Worksheetfunction.CountA nehmem.
Gruß Gerd

Beide Codes!.
02.05.2014 08:59:53
EtoPHG
Hallo Tino,
Ich baue in deine Beispieldatei ins Makro noch ein:
With Tabelle1.UsedRange.EntireRow
MsgBox .Cells(.Rows.Count, 1).End(xlUp).Row     ' Der Einzeiler

Egal ob ich jetzt A12, A20 oder A100 aktiviert habe, bzw zu dieser Zeile gescrollt habe und das Makro starte:
Ich erhalte immer 2 x die Msgbox 17
Getestet mit XL 2007, 2013 und jeweil im Kompatilitätsmodus (97-2003).
...und darum kann ich das Problem nicht nachvollziehen.
Gruess Hansueli

Anzeige
verstehe ich nicht, bei mir nicht?
02.05.2014 09:31:01
Tino
Hallo,
Userbild
Gruß Tino

With-Klammer?
02.05.2014 09:43:29
Erich
Hi Tino,
vielleicht liegt es an dem im With festgelegten Bereich? Probier mal

With Tabelle1.UsedRange.EntireRow
MsgBox .Address
MsgBox .Cells(.Rows.Count, 1).Address
MsgBox .Cells(.Rows.Count, 1).End(xlUp).Address
MsgBox .Cells(.Rows.Count, 1).End(xlUp).Row     ' Der Einzeiler
End With
Vielleicht reicht es aus, wenn du beim With nur Tabelle1 angibst und .UsedRange.EntireRow weglässt.
UsedRange ist ein manchmal überraschendes Wesen...
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
könnte stimmen
02.05.2014 10:18:14
Tino
Hallo Erich,
sieht so aus als ob Du Recht hast.
Muss es mal genauer untersuchen was da rumzickt.
Melde mich später noch mal, muss jetzt erst mal Mittagessen kochen.
Gruß Tino

liegt an Excel auf einem Rechner
02.05.2014 15:55:38
Tino
Hallo,
habe es nun noch an zwei anderen Rechnern durchgetestet.
Dort funktioniert alles wie gehabt auch mit xlUp.
Nur an meinem Arbeitsrechner nicht (gleiche Datei, gleiche Version xl2010 32Bit)
nur das es ein Win7 64bit ist und die anderen Win7 32.
Muss also mit meinem Excel oder/und Windows zusammenhängen.
Gruß Tino

glaub ich nich :-(
02.05.2014 16:58:34
Erich
Hi Tino,
genau diese Konstellation (Win7-64 und xl2010-32) habe ich auch. Und da läuft alles normal.
Ich denke, das hat nichts zu tun mit den Versionen, auch nicht mit einer Zeilenfixierung.
Ich bleibe dabei: UsedRange.
Probier mal auf einem frischen Tabellenblatt, in dem du nur die Zellen A8:A12 beschrieben hast,
das hier:

Sub aTest()
With Tabelle1.UsedRange '.EntireRow
MsgBox ".UsedRange: " & .Address & vbLf & _
".Cells(.Rows.Count, 1): " & .Cells(.Rows.Count, 1).Address & vbLf & _
".Cells(.Rows.Count, 1).End(xlUp): " & _
.Cells(.Rows.Count, 1).End(xlUp).Address & vbLf & _
"Einzeiler-Row: " & .Cells(.Rows.Count, 1).End(xlUp).Row
End With
With Tabelle1
MsgBox "ohne UsedRange" & vbLf & _
".Cells(.Rows.Count, 1): " & .Cells(.Rows.Count, 1).Address & vbLf & _
".Cells(.Rows.Count, 1).End(xlUp): " & _
.Cells(.Rows.Count, 1).End(xlUp).Address & vbLf & _
"Einzeiler-Row: " & .Cells(.Rows.Count, 1).End(xlUp).Row
End With
End Sub
Oben kommt Einzeiler-Row 8 raus, unten 12.
Noch eins: Allein durch Speichern, Schließen und Öffnen einer Mappe wird UsedRange verändert.
Damit sind die Blätter auf verschiedenen Rechnern nicht wirklich gleich.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
bei mir stimmt was nicht
02.05.2014 17:57:58
Tino
Hallo,
das ist nachvollziehbar.
In der Datei die ich in einem vorhergehenden Beitrag hochgeladen habe
ist die Zelle A8:A17 und B8:B38 gefüllt, Usedrange müsste also mindestens bis Zeile 38 gehen.
Wenn ich die Zeile 17 im sichtbaren Bereich habe kommt mit xlUp in Spalte A die Zeile 17 raus,
scrolle ich runder wird 8 ausgeben und dies wie jetzt festgestellt nur an diesem Rechner.
Auch ohne Usedrange nur die Tabelle ist dieses Verhalten so als wären die Zellen ausgeblendet.
Was ich jetzt noch festgestellt habe, wenn ich in A in die letzte Zeile gehe
und mit Strg+Pfeil oben (ist ja wie xlUp) die nächste benutzte Zelle anspringe
geht dies in die Überschrift A8.
An dem anderen Rechner wird die Zeile 17 in den sichtbaren Bereich gebracht.
Warum dieses Verhalten so ist habe ich noch nicht herausbekommen.
Suche in den Optionen schon nach einer evtl. mir nicht bekannten Einstellung.
(Mich hat der Beitrag von EtoPHG auch schon verdutzt, jetzt wird mir so einiges klar)
Habe schon öfters mit fixierten Tabellen gearbeitet aber dies war mir noch nie aufgefallen.
Gruß Tino

Anzeige
Testvorschläge
02.05.2014 18:58:23
Erich
Hi Tino,
vergeblich habe ich bei mir nach einer Einstellung gesucht, die damit etwas zu tun haben könnte.
Hier ein paar Vorschläge:
Wo landet der Cursor bei Strg+Ende? B38?
Was ändert sich, wenn du
a) die Fixierung entfernst
b) die (bereits leere) Zelle A50 noch mal per Entf-Taste leerst
c) die Zelle A11 per Entf-Taste leerst
d) Spalte B löschst (dann Mappe speichern unter, schließen, neu öffnen)
und dabei vor dem Makrostart jeweils zu Zeile 90 scrollst?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Testvorschläge - Ergänzung
02.05.2014 19:07:08
Erich
Hi Tino,
bei meinen Vorschlägen meinte ich erst mal gar kein Makro, sondern den Test, wo der Cursor
bei Strg+Pfeil oben von A90 aus landet.
Viel Erfolg! :-)
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Testvorschläge - Ergänzung
02.05.2014 20:03:36
Tino
Hallo,
bei Strg+Ende lande ich in B8 wenn der darunterliegende Bereich nicht sichtbar ist,
ist ein Teil davon sichtbar lande ich in B38.
Habe dies jetzt auch an einer komplett neuen Datei versucht auch hier zeigt sich dieses verhalten,
Auf dem anderen Rechner scrollt der Bereich automatisch, auf diesen nicht.
Muss mal schauen evtl. sind in letzter Zeit irgendwelche MS Update installiert wurden.
Gruß Tino

Wenns du's rausfindest würde es mich...
02.05.2014 22:08:16
Raphael
Hallo Tino,
falls du rausfindest warum das so ist, würde mich das brennend interessieren. Ich habe einige Makros welche bei uns in der Firma auf 65 PC's (alle identisch vom Update-Stand und der Konfiguration) laufen. Bei zweien zicken sämtliche Makros welche irgendwas mit usedrange im Code haben. Bei den anderen 63 funktioniert alles tadellos.
Auch der Grund weshalb ich keine usedrange mehr nutze. Aber wenn du eine Lösung findest würde mir das an einigen Stellen das ganze wieder sehr vereinfachen.
Gruess
Raphael

313 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige