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?
Gruß anne
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, 12:15
(Dieser Beitrag wurde zuletzt bearbeitet: 06.08.2015, 12: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, 12: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 festgelegt
Habe 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
Gruß anne
Registriert seit: 28.07.2015
Version(en): 365
06.08.2015, 14:31
(Dieser Beitrag wurde zuletzt bearbeitet: 06.08.2015, 14: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, 14:33
(Dieser Beitrag wurde zuletzt bearbeitet: 06.08.2015, 14: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, 14: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.
Gruß anne
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Anne,
(06.08.2015, 16: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, 04: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.
Gruß anne
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)
|