Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Excel VBA letzte Zelle finden und Wert schreiben
#1
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
Antworten Top
#2
Hallo Mattias,

bei mir funktioniert das. Zeige mal den restlichen Quelltext.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
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.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#4
Hi.

Danke Hkindler

Dein Code hat funktioniert.

Vielen DANK
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste