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

Selection.End(xlDown).=Offset(1,0).Select funktioniert nicht

Selection.End(xlDown).=Offset(1,0).Select funktioniert nicht
29.12.2023 08:50:00
Stephan
Liebes Forum,
in meinem bisher umfangreichsten EXCEL Projekt, habe ich ein Formblatt erstellt, das von unterschiedlichen Usern verwendet werden soll. Die im Formblatt ermittelten Daten sollen in einer "Datenbank" (Tabellenblatt) gespeichert werden. Mein erstes Makro soll also die Werte definierter Zellen in die Datenbank übertragen. In der Datenbank soll in einer Spalte nach der ersten freien Zelle gesucht werden, um dort die Daten einzutragen. Das funktioniert beim ersten Datensatz. Beim zweiten Datensatz überschreibt dieser teilweise die Werte des ersten und teilweise funktioniert die Funktion korrekt und die Daten landen in der ersten freien Zelle. Kann mir einer von euch erklären warum?

Mein Code:
'Copy Part Name
Work_Sheet.Activate
Range("E11").Select
Selection.Copy
Result_Database.Activate
Range("A1").Select
Selection.End(xlDown).Offset(1, 0).Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Danke für eure Zeit und das tolle Forum.

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Selection.End(xlDown).=Offset(1,0).Select funktioniert nicht
29.12.2023 09:22:20
ralf_b
Zitat: Beim zweiten Datensatz überschreibt dieser teilweise die Werte des ersten und teilweise funktioniert die Funktion korrekt
und was ist dieses "teilweise"?
ermittelst du bei jeder zu kopierenden Zelle im Datensatz die letzte Zeile?
AW: Selection.End(xlDown).=Offset(1,0).Select funktioniert nicht
29.12.2023 09:22:34
Daniel
Probiere mal, ob's besser funktioniert, wenn du das Activate durch Select ersetzt.

Generell solltest du ohne Select und Activate programmieren:

Work_Sheet.Range("E11").Copy

Result_Database.Range("A1").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteValues


Beachte, das der Sprung hier nur korrekt ausgeführt wird, wenn A1 und A2 gefüllt sind.
Zuverlässiger ist in der Regel der Sprung von unten nach oben:

cells(rows.count, 1).end(xlup).offset(1, 0)

Gruß Daniel
Anzeige
AW: Selection.End(xlDown).=Offset(1,0).Select funktioniert nicht
29.12.2023 19:57:50
GerdL
Moin
Result_Database.Cells(Result_Datbase.Rows.Count, 1).End(xlUp).Offset(1, 0) = Work_Sheet.Range("E11").Value


Gruß Gerd
AW: Selection.End(xlDown).=Offset(1,0).Select funktioniert nicht
29.12.2023 12:13:39
Stephan
Hallo Daniel, hallo Ralf,

zuerst einmal vielen Dank für die schnelle Antwort!

Den Tipp ohne Select und Activate zu programmieren, verstehe ich noch nicht ganz. Im Schrittmodus stelle ich fest, dass Excel ohne diese Kommandos die Befehle "nicht optisch" durchführt. Dadurch wird dann wahrscheinlich Rechenzeit gespart?

Die Methode, die leere Zelle von unten her zu ermitteln finde ich elegant. Durch Überschriften etc. ist die erste Zeile ja meist nicht vollständig ausgefüllt (was bei mir offenbar auch der Fehler war). Mit der Suche von unten funktioniert das Makro!

Mein Jahr geht also mit einer positiven Lernerfahrung zu Ende :-)

Vielen Dank dafür!
Anzeige
AW: Selection.End(xlDown).=Offset(1,0).Select funktioniert nicht
29.12.2023 14:16:13
daniel
Richtig, der Code wird schneller, wenn man nicht selektiert, weil das Selektieren Zeit braucht.

Aber der Code wird nicht nur schneller, sondern auch kürzer und weniger fehleranfällig.

Klar ist es am Anfang zum lernen einfacher, wenn man erst selektiert und dann den Befehl ausführt, aber es ist einfach besser ohne.

Im Zweifelsfall kann man zusätzlich selektieren, wenn man sehen möchte, was der Code gerade macht, das kann man dann einfacher rausnehmen, wenn der Code funktioniert und man es nicht mehr braucht.

Also nicht:
Range("A1"). Select

Selection.Value = "Hallo Welt"

Sondern
Range("A1"). Select

Range("A1").Value = "Hallo Welt"

Dann kann man die Zeile mit dem Select löschen oder auskommentieren, wenn man sie nicht mehr braucht.

Gruß Daniel
Anzeige
AW: Selection.End(xlDown).=Offset(1,0).Select funktioniert nicht
29.12.2023 14:56:43
Piet
Hallo

da war Daniel schneller, trotzdem lade ich meine Version hoch. Ist halt etwas anders programmiert.
Ich bevorzuge die LastZell von unten zu suchen. Wenn es -leere Zellen- in der Spalte gibt ist xlDwon NICHT geeignet!
Ich benute auch gerne die With Klammer, macht den Code kürzer und übersichtlicher.

mfg Piet

With Result_Database

If Trim(Work_Sheet.Range("E11")) > "" Then
lz1 = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Work_Sheet.Range("E11").Copy
.Cells(lz1, 1).PasteSpecial Paste:=xlPasteValues
End If
End With
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige