Clever-Excel-Forum

Normale Version: Zeile kopieren und einfügen, Positionierung stimmt nicht.
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute,

in einem Tabellenblatt muss ich eine Zeile einfügen. Soweit so gut. Hierzu verwende ich .Insert Shift:=xlDown.

'Begin: Neue Zeile in Tabellenblatt Gewährleistung anlegen
    Sheets("Gewährleistung").Activate
    With Range("B11").Offset(iMax, 0)
        'Zeile 11 kopieren
        Range("B11:O11").Copy
        'Zeile 11 einfügen
        .Insert Shift:=xlDown
        'Firmennummer eintragen
        .Value = iMax + 1
        'in den kopierten Formeln "Firma 1" durch "Firma imax+1" ersetzen
        With Application.Intersect(Range("B11:O11").EntireColumn, .EntireRow)
            .Replace What:="Firma 1", Replacement:="Firma " & iMax + 1, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
            SearchFormat:=False, ReplaceFormat:=False
            .Borders(xlEdgeTop).LineStyle = xlContinuous
            .Borders(xlEdgeTop).Weight = xlThin
            'Kopiermodus ausschalten
            Application.CutCopyMode = False
        End With
    End With
    'End: Neue Zeile in Tabellenblatt Gewährleistung anlegen

Bis dahin geht auch Alles gut. Wenn ich jedoch die neue Firmennummer eintrage dann liegt der Pointer nicht mehr auf der eingefügten Zeile sondern 1.Zeile darunter.
Dies führt dazu,  dass die nachfolgenden Befehle nicht ausgeführt werden, da diese Zellen leer sind.

Ich hoffe jemand von euch kann mir hier weiterhelfen. In einem anderen Teil der Anwendung habe ich dieselbe Funktionalität - ohne shiften - Spaltenbezogen abgebildet. Da funktioniert es einwandfrei.

VG Michael
Hallo Michael,

wenn das Verhalten von Excel so nachvollziehbar ist, kann man doch im Code gegensteuern, indem man die richtige Zeile nimmt? Du kannst ja ab dem Punkt mit einem weiteren Offset auch eins zurück gehen (Offset(-1,...).
Hallo Andre,

irgendwie begreife ich das mit der Positionierung nicht richtig.

innerhalb der obigen Funktion habe ich nun folgende Möglichkeiten ausprobiert.

'Firmennummer eintragen
.Offset(-1, 0) = .Value = iMax + 1

Ergebnis ist zwar in der richtigen Zeile Eintrag ist aber 'Falsch'

'Firmennummer eintragen
.Value = iMax + 1
.Offset(-1, 0) = .Value

Der Eintrag von von iMax + 1 erfolgt sowohl in der richtigen als auch in der
darunterliegenden Zeile.

VG Michael
Hallo Michael,

erst mal zum FALSCH.
.Offset(-1, 0) = .Value = iMax + 1

Das ist das Ergebnis dieser "Berechnung": .Value = iMax + 1
Es wird hier geprüft, ob der Zellinhalt gleich imax+1 ist. Und das wäre entweder FALSCH oder WAHR

Korrekt wäre
.Offset(-1, 0) .Value = iMax + 1

Hier füllst Du zwei Zellen, hast Du ja schon beschrieben.

.Value = iMax + 1
.Offset(-1, 0) = .Value

Einmal ist es die bei With programmierte und beim zweiten mal die von dort ausgehend offsetierte.
Hallo Andre,

jetzt habe ich auch das mit dem Offset verstanden.

Nochmals vielen Dank.

Gruß aus HH

Michael