Clever-Excel-Forum

Normale Version: Excel VBA letzte Zelle finden und Wert schreiben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen.

Ich habe ein Problem, was ich mir nicht erklären kann.

mit folgendem Code suche ich die nächste freie Zelle in der Spalte "Y" und dort soll aus Zelle Q7 der Wert eingetragen werden.

Das ist der Code:
Sheets("Admin").Cells(Cells(Rows.Count, "Y").End(xlUp).Row + 1, "Y").Value = Sheets("Admin").Range("Q7")

Wenn ich den Code Einzel ausführe klappt es ohne Probleme, aber wenn ich diese Zeile innerhalb meines Codes ausführe, wird der Wert immer in Zelle Y2 geschrieben.
Ich weiß nicht woran es liegt. Da der Code sonst nichts mehr irgendwo hinschreiben soll.

Oder habe ich hier eine Denkfehler.

Vielen DANK für eure HIlfe.

Gruß Matthias
Hallo Mattias,

bei mir funktioniert das. Zeige mal den restlichen Quelltext.
Hi,

falls zur Laufzeit nicht das Blatt "Admin" das aktive Blatt ist, landest du wahrscheinlich in der falschen Zelle. Oder anders ausgedrückt: das Cells(Rows... ist ohne Blattdefinition geschrieben und nimmt daher stets ActiveSheet als Ursprung. Korrekt wäre also

Sheets("Admin").Cells(Sheets("Admin").Cells(Rows.Count, "Y").End(xlUp).Row + 1, "Y").Value = Sheets("Admin").Range("Q7")

Aber wozu so umständlich die Zeile bestimmen und diese Zahl dann in Cells einsetzen? Da reicht doch ein ganz primitiver Offset:

Sheets("Admin").Cells(Rows.Count, "Y").End(xlUp).Offset(1).Value = Sheets("Admin").Range("Q7")

Wobei vor Rows.Count eigentlich auch noch das Sheet gehört. Es könnte ja sein, dass zur Laufzeit eine alte xls-Datei oder ein Diagrammblatt gerade aktiv ist. In diesem seltenen Fall könntest du dann eine falsche Zeile bzw. einen Fehler bekommen. Daher besser:
Code:
With Sheets("Admin")
    .Cells(.Rows.Count, "Y").End(xlUp).Offset(1).Value = .Range("Q7")
End WIth
Beachte den Punkt vor .Rows.Count

EDIT:
Statt den Blattnamen zu verwenden, verwende ich idR den CodeName des Blattes. Das hat zwei Vorteile: weniger Schreibarbeit und der Benutzer kann das Blatt ungestraft umbenennen. Wenn dein Blatt Admin also den CodeName Tabelle5 hat, sieht da so aus:
Code:
With Tabelle5
    .Cells(.Rows.Count, "Y").End(xlUp).Offset(1).Value = .Range("Q7")
End WIth

EDIT 2:
Wenn es schöner zu lesen sein soll, kannst du den CodeName eines Blattes natürlich ändern, so dass der Code leichter lesbar wird. Allerdings musst du dann daran denken, alle Vorkommen von z.B. Tabelle5 durch den neuen CodeName zu ersetzen. Meist mache ich mir aber nicht die Mühe, denn man hat im Projektexplorer ja jederzeit im Blick, welches Blatt Tabelle5 denn nun ist.
Hi.

Danke Hkindler

Dein Code hat funktioniert.

Vielen DANK