Registriert seit: 21.07.2015
Version(en): 2010
Hallo, kann jemand bei folgendem Problem helfen? In einem Bereich z.B. B10:Z20 werden Buchstaben und Zahlen eingetragen. Einzelne Zellen können auch leer bleiben. Nun möchte ich per Makro zur letzten Zelle mit einem Inhalt in diesem Bereich springen. Das mache ich bisher so, funktioniert aber nicht exakt: Code: Sub letzteZelle() Range("B10:Z20").Find(what:="?*", LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlPrevious).Select End Sub
Fallbeispiel: Wenn der letzte Inhalt in V16 steht und der vorletzte in S20 wird S20 markiert und nicht V16. Es wird scheinbar immer die letzte unterste Zelle mit Inhalt im Bereich gefunden. Was müßte im Code geändert werden?
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Hallo! Der zusätzliche Parameter SearchOrder:=xlByColumns sollte helfen.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 28.07.2015
Version(en): 365
06.08.2015, 13:15
(Dieser Beitrag wurde zuletzt bearbeitet: 06.08.2015, 13:20 von DbSam.)
Hallo return,
meinst Du das hier?: Code: Sub letzteZelle() Range("B10:Z20").SpecialCells(xlCellTypeLastCell).Select End Sub
Gruß Carsten Edit: Ne, Du willst die letzte gefüllte Zelle im Bereich. Nimm Ralfs Vorschlag. :)
Registriert seit: 21.07.2015
Version(en): 2010
(06.08.2015, 13:14)RPP63 schrieb: Der zusätzliche Parameter SearchOrder:=xlByColumns sollte helfen. Super, der Parameter passt. Allerdings bekomme ich eine Fehlermeldung, wenn der Bereich leer ist. Laufzeitfehler '91':Objektvariable oder With-Blockvariable nicht festgelegtHabe das mit on error umgangen. Oder macht man es besser anders? Das Makro ist einfach einer Form zuwiesen. Bem.: Carstens Vorschlag funktioniert garnicht ?? Zitat:meinst Du das hier?: Sub letzteZelle() Range("B10:Z20").SpecialCells(xlCellTypeLastCell).Select End Sub Gruß Carsten
Registriert seit: 28.07.2015
Version(en): 365
06.08.2015, 15:31
(Dieser Beitrag wurde zuletzt bearbeitet: 06.08.2015, 15:31 von DbSam.)
Hallo Anne, mein Beispiel funktionierte schon, nur eben nicht wie von Dir gewünscht. Es sucht die letzte Zelle in der Range auf. Zu Deinem Problem mit dem Laufzeitfehler könnte es auch folgende Lösung geben: Code: Sub letzteZelle() On Error GoTo Er If Not Range("B10:Z20").Find(what:="?*", LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlPrevious, SearchOrder:=xlByColumns) Is Nothing Then Range("B10:Z20").Find(what:="?*", LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlPrevious, SearchOrder:=xlByColumns).Select Else Range("B10").Select End If Ex: Exit Sub Er: MsgBox "FehlerNr:" & Err.Number & vbCrLf & Err.Description Resume Ex End Sub
Gruß Carsten
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
06.08.2015, 15:33
(Dieser Beitrag wurde zuletzt bearbeitet: 06.08.2015, 15:35 von RPP63.)
Hallo Anne! On Error sollte man nur bei unerwarteten Fehlern nutzen. Dies ist hier nicht der Fall. Eine Möglichkeit ist, eine Range-Variable (hier die Fundstelle) auf Nothing zu prüfen: Code: Sub letzteZelle() Dim LZ As Range Set LZ = Range("B10:Z20").Find(What:="?*", LookIn:=xlValues, _ LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious) If Not LZ Is Nothing Then Application.Goto LZ End Sub
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 21.07.2015
Version(en): 2010
(06.08.2015, 15:33)RPP63 schrieb: On Error sollte man nur bei unerwarteten Fehlern nutzen. Dies ist hier nicht der Fall. Eine Möglichkeit ist, eine Range-Variable (hier die Fundstelle) auf Nothing zu prüfen:
Code: Sub letzteZelle() Dim LZ As Range Set LZ = Range("B10:Z20").Find(What:="?*", LookIn:=xlValues, _ LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious) If Not LZ Is Nothing Then Application.Goto LZ End Sub
Hallo Carsten und Ralf, beide Codes laufen tadellos. Habe mich auf Grund der Erklärung für Ralfs Vorschlag entschieden. Vielen Dank für Eure Beiträge. @Carsten: Hatte Deinen 1. Code in zwei Mappen ausprobiert. In der ersten wurde die Zelle A1 selektiert und in der zweiten AH20. Daraus konnte ich mir keinen Reim machen. Aber jetzt ist ja ok.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Anne, (06.08.2015, 17:42)anne schrieb: @Carsten: Hatte Deinen 1. Code in zwei Mappen ausprobiert. In der ersten wurde die Zelle A1 selektiert und in der zweiten AH20. Daraus konnte ich mir keinen Reim machen. Aber jetzt ist ja ok Range("B10:Z20").SpecialCells(xlCellTypeLastCell).Select findet auch eine Zelle, deren Inhalt Du in der Sitzung / nach dem letzten Speichern gelöscht hast.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 21.07.2015
Version(en): 2010
(08.08.2015, 05:44)schauan schrieb: Hallo Anne,
Range("B10:Z20").SpecialCells(xlCellTypeLastCell).Select
findet auch eine Zelle, deren Inhalt Du in der Sitzung / nach dem letzten Speichern gelöscht hast. Hallo André, habe gerade mal ein bisschen damit rumgespielt. Erstaunlich, es werden ja auch nur Formatierungen gefunden. Formatierungen haben aber scheinbar eine höhere Priorität wie Dateneinträge.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Anne, Das ist eben das Unsichere an dem Code. Ging es bei den Formatierungen eventuell um benutzerdefinerte? Da gibt's auch noch Unterschiede. Wenn Du z.B. Das ganze Blatt markierst und eine normale Formatierung nimmst - beispielsweise Zellrahmen, findet es glücklicherweise nicht das ganze Blatt bzw die allerletzte Zelle rechts unten.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
|