Anzeige
Archiv - Navigation
1164to1168
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

Fehler bei Kopieren von markierter Zeile

Fehler bei Kopieren von markierter Zeile
markierter
Hallo zusammen,
ich verzweifel gerade an folgendem Problem. In einem Excel mit teilweise geschützten Zellen (wegen Formeln und Verweisen auf andere Arbeitsblätter) möchte ich, dass jeder neue Zeilen einfügen kann. Excel beschwert sich aber, wenn ich geschützte Spalten markiere und erst recht verschiebe, um die neue Zeile einzufügen. Deswegen per VBA, um den Schutz aufzuheben:
Sub Test()
' Worksheets("Test1").Unprotect Password:="test"
Dim tst As String
tst = ActiveCell.Row
MsgBox tst
ActiveCell.EntireRow.Select
Selection.Copy
Selection.Insert Shift:=xlDown
' Worksheets("Test1").Protect Password:="test"
End Sub

Die Codezeilen von Dim bis MsgBox sind nur zur Sicherheit für mich, aber im Prinzip dachte ich, die Sub markiert die komplette Zeile, in der sich meine aktive Zelle befindet, markiert sie, kopiert sie und fügt sie eins weiter unten noch mal ein.
Allerdings kopiert er die falschen Inhalte. Er fügt zwar die Zeile ein und kopiert auch das Datum, das in Spalte A steht, korrekt. Aber die dahinterliegenden Formeln in den anderen Spalten zieht er offenbar aus der Zeile darüber.
Was mache ich falsch?
Danke,
juliusmk
AW: Fehler bei Kopieren von markierter Zeile
20.07.2010 16:04:21
markierter
Hallo Julius,
der Code (von select bereinigt) funktioniert bei mir. Ich tippe, dass der Fehler nicht im Code liegt sondern in den Formeln. Relative oder absolute Bezüge? Um ganz sicher zu sein, kannst du die Formeln auch per VBA einfügen (da du ja "eh" ein Makro startest).
Sub Test()
Worksheets("Test1").Unprotect Password:="test"
With ActiveCell.EntireRow
.Copy
.Insert shift:=xlDown
End With
Application.CutCopyMode = xlCopy
Worksheets("Test1").Protect Password:="test"
End Sub

AW: Fehler bei Kopieren von markierter Zeile
20.07.2010 16:13:02
markierter
Hallo Klaus,
hm, ich multipliziere eine benachbarte Zelle mit einer Zelle aus einem anderen Arbeitsplatz, per "=J16*test2!E16".
Wenn ich die die Zeile 17 kopiere (wo eigentlich =J17*test2!E17 verwendet werden sollte), nimmt er die Werte aus der darüberliegenden, also alles mit 16.
BTW, wieso arbeitest Du mit "With" und der Application? Bin VBA-Neuling...
Danke & lG,
juliusmk
Anzeige
AW: Fehler bei Kopieren von markierter Zeile
20.07.2010 16:54:04
markierter
Hi Julius,
hab grad mal ein wenig rumprobiert: die Formel-Bezüge auf externe Blätter werden nicht angepasst, wenn man mit rechtsclick-einfügen eine neue Zeile einfügt. VBA macht ja nichts anderes, darum werden auch hier die Formeln nicht angepasst.
Wenn ich etwas darüber nachdenke macht das ja auch Sinn .... der Bezug geht ja auf ein anderes Blatt, in dem eben keine Zelle eingefügt wurde.
Kannst du deine Tabelle (mit anonymisierten Werten) mal hochladen? Ich bin mir sicher, die Formeln mit VBA zu schreiben wird genausogut funktioniern.
Mit "with" arbeitet man, um absolut zu referenzieren.
With ActiveCell.EntireRow
.Copy
.Insert shift:=xlDown
End With

ist das gleiche wie
ActiveCell.EntireRow.Copy
ActiveCell.EntireRow.Insert shift:=xlDown

Auf .select und selection.XXX kann man zu 99,9% verzichten, dass macht den Code nur unübersichtlicher und langsamer. Beispiel:
Range("A1").select
Selection.value = "Hallo"

Sind zwei Zeilen. Der Cursor bewegt sich, der Bildschirm flackert, und bei einem Fehler blickt man grad in längerem Code nicht mehr durch. Dagegen ist
Range("A1").value = "Hallo"

schlichter, präziser und vor allem performanter.
Peter Haserodt kann das besser erklären als ich, lies dir mal folgendes durch:
http://www.online-excel.de/excel/singsel_vba.php?f=78
Ich bin heute nicht mehr am PC, darum stell ich die Frage wieder auf offen. Vielleicht schaut ja noch jemand anders rein. Wenn du antwortest und deine Datei hochlädst, vergiss nicht die Frage auf "offen" zu stellen!
Grüße,
Klaus M.vdT.
Anzeige
AW: Fehler bei Kopieren von markierter Zeile
20.07.2010 17:58:23
markierter
Hi Klaus,
danke für die Mühe. Die Datei liegt hier: https://www.herber.de/bbs/user/70661.xls
Kurz zum Aufbau:
1. Blatt "Zeit" - das bleibt größtenteils editierbar, jeder kann auswählen, für welches Event er wie lange gebraucht hat. Und eben ein neues Event einfügen. Funktioniert per Button, es wird der Tag "dupliziert", an dem sich der Cursor befindet.
2. und 3. Blatt "Lohn" und "Kosten" - das kann nur jemand mit Passwort bearbeiten, beide greifen auf Daten zu, die in 1. eingetragen wurden
4. Ist nur für die Pulldowns-Texte wichtig
Ich weiß, alles etwas dilettantisch, aber mein Kenntnisstand entsprechend. ;-) Im Prinzip müsste ich per Button die neue Zeile in die Blätter 1 - 3 eintragen und die entsprechenden Daten gleich mit dazu... verzwickt.
Danke!
juliusmk
Anzeige
AW: Fehler bei Kopieren von markierter Zeile
21.07.2010 02:25:52
markierter
Hallo juliusmk,
in den Blättern Lohn und Kosten beginnen die Daten in Zeile 3, im Blatt Zeit in Zeile 6. Das muss man berücksichtigen, wenn die Zeilen in den Blättern Lohn und Kosten kopiert werden.
Falls ein Event wieder gelöscht werden soll, dann muss die entsprechende Zeile in den anderen Blättern auch wieder gelöscht werdden. Ich hab das entsprechende Makro auch vorbereitet.
Gruß
Franz
https://www.herber.de/bbs/user/70667.xls
AW: Fehler bei Kopieren von markierter Zeile
21.07.2010 08:37:05
markierter
Ja, das hab ich mir auch schon überlegt, ob ich nicht oben drei Zeilen einfüge überall, um die Rechnung zu vereinfachen. Ich schau mir das nachher gleich mal an, vielen Dank schon mal Euch beiden!
Anzeige
AW: Fehler bei Kopieren von markierter Zeile
21.07.2010 17:48:46
markierter
Hallo zusammen,
funktioniert prima. Danke Euch! Was ich aber nicht verstehe, wieso es jetzt funktioniert, wo doch der zentrale Code derselbe ist wie von Klaus. Und da ging ja irgendwas beim Kopieren schief.
LG, juliusmk
AW: Fehler bei Kopieren von markierter Zeile
21.07.2010 19:59:29
markierter
Hallo juliusmk,
in meiner Lösung wird durch die With-Konstruktion sichergestellt, dass die Aktionen immer im gewünschten Blatt stattfinden.
        With ActiveSheet   '= Blatt "Zeit"
.Rows(org).Copy
.Rows(org + 1).Insert Shift:=xlDown
End With
With Worksheets("Lohn")
.Unprotect Password:="test"
.Rows(org - 3).Copy
.Rows(org - 3 + 1).Insert Shift:=xlDown
.Protect Password:="test"
End With
With Worksheets("Kosten")
.Unprotect Password:="test"
.Rows(org - 3).Copy
.Rows(org - 3 + 1).Insert Shift:=xlDown
.Protect Password:="test"
End With
Im Vorschlag von Klaus
Sub Test()
Worksheets("Test1").Unprotect Password:="test"
With ActiveCell.EntireRow
.Copy
.Insert shift:=xlDown
End With
Application.CutCopyMode = xlCopy
Worksheets("Test1").Protect Password:="test"
End Sub
ist aber wegen nicht ausreichender Hinweise in deiner ursprünglichen Problembeschreibung für die Kopier-Aktion der Bezug auf die aktive Zelle gewählt.
Die aktive Zelle ist aber immer eine Zelle auf dem gerade aktiven Tabellenblatt. In deinem Fall wurden dann wahrscheinlich immer weitere Zeilen im Blatt Zeit kopiert/eingefügt und nicht auf den Blättern Lohn und Kosten.
Gruß
Franz
Anzeige
AW: Fehler bei Kopieren von markierter Zeile
22.07.2010 13:17:37
markierter
Hallo Franz,
danke fürs Einspringen, ich hatte gestern keine Zeit mehr die Datei anzusehen. Ist eine schöne und elegante Lösung geworden!
Hallo Julius,
ganz nebenbei beantwortet Franz hier deine eingehende Frage, warum man mit "WIDTH" Rahmen arbeitet :-)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige