2.7k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo an Alle,

ich möchte in einer Arbeitsmappe in 2 Tabellenblätter jeweils an der gleichen
Stelle je eine Zeile einfügen. (zB. in Tabelle1 über Zeile 14 und in Tabelle5
über Zeile 14) Aus der darüberliegenden Zeile sollen die Inhalte jeweils in
die neue Zeile kopiert werden, wobei nur die Formeln in der neuen Zeile
erhalten bleiben sollen und eingegebene Daten gelöscht werden sollen.
Nach Aufzeichnung des Makros funktioniert beim ersten Start des Makros
Alles einwandfrei. Beim nächsten und weiteren Starts läufts falsch.

Ich hoffe jemand kann mir helfen

Gruß und Dank im voraus

Martin

11 Antworten

0 Punkte
Beantwortet von saarbauer Profi (15.6k Punkte)
Hallo,

stell mal das Makro hier ein, vieleicht können wir weiterhelfen.

Gruß

Helmut
0 Punkte
Beantwortet von
Hallo Helmut,

anbei das aufgezeichnete Makro:

Sub EinfügenZeilen()
'
' EinfügenZeilen Makro
' Makro fügt Zeilen in Tabelle: Eingabe und an gleicher Stelle in Tabelle des lfd.Jahres ein, kopierrt die darüberliegende Zeile und löscht die eingegebenen Daten in der neuen Zeile
'
' Tastenkombination: Strg+Umschalt+E
'
Rows("14:14").Select
Selection.Insert Shift:=xlDown
Sheets("2011").Select
Rows("14:14").Select
Selection.Insert Shift:=xlDown
Range("A13:P13").Select
Selection.Copy
ActiveWindow.LargeScroll ToRight:=-1
Range("A14").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Sheets("Eingabe").Select
Range("A13:AB13").Select
Selection.Copy
Range("A14").Select
ActiveSheet.Paste
Range("D14:R14").Select
Application.CutCopyMode = False
Range("D14:Z14").Select
Selection.ClearContents
End Sub

Gruß

Martin
0 Punkte
Beantwortet von
Hallo Martin,

was hältst Du von
Sub EinfügenZeilen()
'
' EinfügenZeilen Makro
' Makro fügt Zeilen in Tabelle: Eingabe und an gleicher Stelle in Tabelle des lfd.Jahres ein, kopierrt die darüberliegende Zeile und löscht die eingegebenen Daten in der neuen Zeile
'
' Tastenkombination: Strg+Umschalt+E
'
With Sheets("Eingabe")
.Rows("14:14").Insert Shift:=xlDown
.Range("A13:AB13").Copy
.Paste (.Range("A14"))
Application.CutCopyMode = False
.Range("D14:Z14").ClearContents
End With

With Sheets("2011")
.Rows("14:14").Insert Shift:=xlDown
.Range("A13:P13").Copy
.Paste (.Range("A14"))
Application.CutCopyMode = False
End With

Sheets("Eingabe").Activate 'oder Sheets("2011").Activate - je nachdem

End Sub

Leider hast Du nicht geschrieben, was genau ab dem 2. Start falsch läuft.
Auf jeden Fall hättest Du vor dem Starten Deines Makros immer das Tabellenblatt "Eingabe" aktivieren/selektieren müssen oder zu Beginn eine Zeile Sheets("Eingabe").Select einfügen müssen, damit es an dieser Stelle funktioniert.

MfG Klaus
0 Punkte
Beantwortet von
Hallo Klaus,

vielen Dank für den(das) Makro, (wie sagt man eigentlich?)
Bei der ersten Ausführung läuft Alles richtig, wenn ich z.B. über Zeile: 14 eine neue Zeile einfügen möchte.
Wenn ich aber dann die Arbeitsmappe gespeichert habe und z.B. über Zeile: 24 eine neue Zeile
einfügen möchte, funktioniert es nicht, da wiederum Zeile: 14 neu eingefügt wird.

Ich hoffe es gibt heirfür eine Lösung und sage schon mal Dank im Voraus

mfg Martin
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Martin,

Deine Vorgabe war über Zeile 14 eine Leerzeile einzufügen. Das hat Klaus mit seinem Makro realisiert. Allerdings fügt das Makro immer in Zeile 14 eine Leerzeile ein. Damit es an anderer Stelle eine Leerzeile einfügt, müsstest Du schon mal schreiben, nach was für Kriterien denn eine Leerzeile oberhalb von Zeile x eingefügt werden soll. Wenn man das weiß, kann man Dir sicherlich auch helfen.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von
Hallo Martin,

ich schließe mich Coros' Worten an. Folgendes ist denkbar/machbar: Das Makro fügt die neue Zeile immer oberhalb der Zelle oder Zeile ein, die gerade selektiert/aktiviert (sprich: angeklickt) ist. Das Makro könnte recht einfach gehalten bleiben, wenn Benutzerfehler ausgeschlossen werden können, z. B. dass Bereiche selektiert sind, die mehr als eine Zeile umfassen oder dass nicht zusammenhängende Bereiche selektiert sind. In diesen Fällen müssten man dann entweder stillschweigend von einer Annahme ausgehen und das nahe liegende tun oder abbrechen oder eine Rückfrage an den Benutzer stellen.

In welchem Tabellenblatt beginnt der Benutzer mit dem Einfügen und was soll dann in dem anderen Tabellenblatt noch passieren?

In jedem Falle gilt: Du musst möglichst genau beschreiben, was Du wie haben willst.

MfG
Klaus
0 Punkte
Beantwortet von
Hallo Klaus, hallo Oliver,

leider habe ich mich scheinbar nicht klar genug ausgedrück. Ich bitte dies zu entschuldigen.

Ich habe in einer Arbeitsmappe mehrere Tabellenblätter und möchte in 2 Tabellenblätter jeweils eine Zeile an der gleichen Stelle einfügen,
Je Tabellenblatt die Informationen (Formeln) aus der darüberliegenden Zeile in die neue Zeile kopieren und eingegebene Daten aus der darüberliegenden
Zeile, welche mitkopiert wurden löschen. Das Ergebnis soll sein: Neue Zeile mit Formeln aus der darübleigenden Zeile ohne Daten aus der darüberleigenden
Zeile. Das Ganze soll mehrfach an verschieden Stellen in den Tabellblättern möglich sein. z.B. In Tabelle 1("Eingabe") und Tabelle 5("lfd.Jahr") je über Zeile 14 eine Zeile einfügen, kopieren,
löschen. Dann Selbiges in Zeile 25, dann in Zeile 48 usw. Alles passiert nur in diesen beiden Tabellenblättern.
Start sollte immer in Tabelle 1("Eingabe") sein.
Idealerweise wäre es schön, wenn man irgendwie gewährleisten könnte, dass in beiden Tabellen vom Benutzer die gleichen Zeilen markiert wurden, an denen Zeilen eingefügt
werden sollen, damit nicht wie zur Zeit bei manueller Behandlung in der einen Tabelle an Zeile 14 und in der anderen Tabelle an Zeile 15 eingefügt wird.

Ich hoffe man kann mir helfen. Dank im voraus.

Gruß Martin
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Martin,

sorry, aber das Ganze klingt sehr verworren und ist schwer verständlich. Wenn Du eine Formel kopierst, kannst Du aus der Formel nicht irgendetwas herauslöschen, weil durch die Formel etwas falsches steht, sondern es muss in der Zelle, auf die sich die Formel bezieht etwas gelöscht werden. Es wäre sicherlich besser, wenn Du mal Deine Datei als Beispieldatei z.B. bei http://www.file-upload.net/ hochlädst und den link, den Du erhältst uns hier mitteilst. Dann kann man sich das mal an Deiner realen Datei ansehen und eventuell wird dann einiges verständlicher. Daten die uns nichts anzugehen haben, aber für Formeln usw. benötigt werden, ändere bitte in Dummydaten. Sollten die Daten für Formeln nicht benötigt werden, so kannst Du die auch löschen.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von
Hallo Oliver,

anbei wie gewünscht der Link für die
hochgeladene Datei

http://www.file-upload.net/download-3631795/Gespr-chsgeb-hren3.xls.html

Ich hoffe dass das klappt.

mfg

Martin
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Martin,

nachfolgendes Makro fügt Die immer im Tabellenblatt „Eingabe“ in der Zeile, in der der eine Zelle markiert ist, eine Leerzeile ein, kopiert alles aus einer Zeile höher in die eingefügte Zeile und löscht die von Dir vorgegebenen Zelleninhalte.
Das Gleiche passiert im Tabellenblatt „2011“ außer das Löschen der Daten, da es dort ja nicht notwendig ist
Auf das Prüfen ob in beiden Tabellenblättern die richtige Zelle in der gleichen Zeile markiert ist, habe ich verzichtet, da ich das nicht als notwendig empfinde. Es soll ja in beiden Tabellenblättern in der gleichen Zeile eine Leerzeile usw. eingefügt werden. Es reicht somit aus, wenn nur eine Zelle im Tabellenblatt „Eingabe“ markiert wird.

Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

Option Explicit

Sub Zeile_einfügen()
Dim lngRow As Long
Dim intColumn As Integer

On Error GoTo ERRORHANDLER

With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
.ErrorCheckingOptions.BackgroundChecking = False
End With

lngRow = Selection.Row

With Sheets("Eingabe")
.Rows(lngRow).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
.Rows(lngRow - 1).Copy .Cells(lngRow, 1)
For intColumn = 4 To 26 Step 2
.Cells(lngRow, intColumn).ClearContents
Next
End With

With Sheets("2011")
.Rows(lngRow).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
.Rows(lngRow - 1).Copy .Cells(lngRow, 1)
End With

ERRORHANDLER:
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
.ErrorCheckingOptions.BackgroundChecking = True
End With

End Sub

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
...