Spalte auf Bedingung prüfen und Zeile kopieren

Hallo liebe Community,

ich hab eine kleines auf VBA-basierendes Excel-Problem:

Ich hab eine relativ große Tabelle, deren Spalte A, ab A6 aufwärts, folgendermaßen aussieht:

Messefilm



Displayfilm



Interner Film


(usw)

Nun würde ich gerne Vorlagenzeilen per Makro einfügen lassen. Sprich, ich würde gerne in eine Zelle (z.B. in A2) „Messefilm Vorlage“ schreiben und wenn ich darauf klicke wird eine neue Vorlagenzeile, welche ich in Zeile 1 vorgefertig habe, über der „Displayfilm“-Zeile eingefügt.
Und das ganze dann noch für die weiteren Filmkategorien.
Bisher habe ich lediglich rausgekriegt, wie ich meine Vorlagenzeile an die letzte beschriebene Zeile meiner Tabelle kopieren kann.
Kann mir jemand weiterhelfen? Das wäre richtig super!

Vielen, vielen Dank und mind. ebensoviele Grüße

Frank

Hallo Frank,

Nun würde ich gerne Vorlagenzeilen per Makro einfügen lassen.
Sprich, ich würde gerne in eine Zelle (z.B. in A2) „Messefilm
Vorlage“ schreiben und wenn ich darauf klicke wird eine neue
Vorlagenzeile, welche ich in Zeile 1 vorgefertig habe, über
der „Displayfilm“-Zeile eingefügt.

gemäß deiner Beschreibung sieht deine Spalte A in etwa so aus
wie in der nachfolgenden Tabelle.
Nach Klick auf A2 soll dann Spalte A aussehen wie jetzt Spalte B?

Zellbereich: [Mappe1]Tabelle1!A1:B11

\begin{tabular}{|c|c|c|}
\hline
& \textbf{A} & \textbf{B}\
\hline
\textbf{1} & Neue Zelle & Neue Zelle \
\hline
\textbf{2} & Messefilm Vorlage & Messefilm Vorlage \
\hline
\textbf{3} & & \
\hline
\textbf{4} & & \
\hline
\textbf{5} & & \
\hline
\textbf{6} & Messefilm & Messefilm \
\hline
\textbf{7} & & \
\hline
\textbf{8} & & \
\hline
\textbf{9} & & \
\hline
\textbf{10} & Displayfilm & Neue Zelle \
\hline
\textbf{11} & & Displayfilm \
\hline
\end{tabular}

Und das ganze dann noch für die weiteren Filmkategorien.
Bisher habe ich lediglich rausgekriegt, wie ich meine
Vorlagenzeile an die letzte beschriebene Zeile meiner Tabelle
kopieren kann.

Zeige mal dein Makro. Vllt. ist das erhellender.

Gruß
Reinhard

Hallo Reinhard,

vielen Dank für die Schnelle Antwort.
Genau so denke ich mir das.
Bisher hab ich sowas hier:

Sub EasyClip()
Dim lngRow As Long, A As Long
lngRow = Cells(Rows.Count, „A“).End(xlUp).Row
Application.ScreenUpdating = False
For A = lngRow To 1 Step -1
If Cells(A, 1) = „Easy Clip Vertonung“ Then
Sheets(„Projektplan“).Range(„A1:NU1“).Copy
Rows(Cells(A, 1).Row).Insert Shift:=x1Down
End If
Next
Application.ScreenUpdating = True
End Sub

Aber irgendwie will das ganze nicht so ganz.

Vielen Dank und Grüße

Hallo Frank,

Genau so denke ich mir das.

upss, das hatte ich nun nicht erwartet. Meine Tabelle sollte
aus dir weitere Informationen herauslocken damit ich das Problem
überhaupt richtig verstehen kann.

Am Code sehe ich „genau so“ ist gar nicht genau so :smile:
Du kopierst aus einem fremden Blatt.
Übrigens ist dein Code gefährlich für deine Daten.

Schneller als gedacht, grad beim Testen, ist das grad aktive
Blatt nicht das was es sein soll.

Nachstehend habe ich zwei Codes. Der zweite ist wie der erste
nur ist er gedacht wenn du im längeren Code Sheets(„Projektplan“)
mehrfach benutzt, dann nimmste wksP dafür.

Beachte unbedingt den Punkt vor Cells, Range, Row.
Mit Punkt davor bezieht sich auf das Blatt der With-Schleife.
Ohne Punkt auf das grad aktive Blatt.

Aber irgendwie will das ganze nicht so ganz.

Tja nun, haste den Code hier manuell reingeschrieben? Laß das,
dadurch entstehen dann solche Fehler die andere irritieren.
hast du den Code aus dem Editor kopiert so ist schon klar
warum er gar nicht funktionieren kann.

Zumindest wenn du wie es sich IMMER gehört Option
Explicit benutzt hätte dir der Debugger schon eine Fehlerstelle
gezeigt/markiert. Wenn es nur eine ist, hab den Code noch nicht
genau peprüft.

Mit x1Down kann der Code nix anfangen. Es heißt xlDown.
Je nach Schriftart, Schriftgröße und Augenfähigkeit sind
so Fehler verteufelt schwer zu entdecken.

Ändere da halt die Eins in L. Wenn es dann nicht funktioniert
so lade mal eine Beispielmappe hoch mit file-upload
s. FAQ:2606 und erklär nochmal anhand der Mappe wo du klicken
willst und was genau dann wo geschehen soll.
U.v.m.

Gruß
Reinhard


Option Explicit

Sub EasyClip()
Dim lngRow As Long, A As Long
With Worksheets(„Tabelle1“)
lngRow = .Cells(Rows.Count, „A“).End(xlUp).Row
Application.ScreenUpdating = False
For A = lngRow To 1 Step -1
If .Cells(A, 1) = „Easy Clip Vertonung“ Then
Sheets(„Projektplan“).Range(„A1:NU1“).Copy
.Rows(Cells(A, 1).Row).Insert Shift:=x1Down
End If
Next
End With
Application.ScreenUpdating = True
End Sub

Sub EasyClip()
Dim lngRow As Long, A As Long, wksP As Worksheet
Set wksP = Sheets(„Projektplan“)
With Worksheets(„Tabelle1“)
lngRow = .Cells(Rows.Count, „A“).End(xlUp).Row
Application.ScreenUpdating = False
For A = lngRow To 1 Step -1
If .Cells(A, 1) = „Easy Clip Vertonung“ Then
wksP.Range(„A1:NU1“).Copy
.Rows(Cells(A, 1).Row).Insert Shift:=x1Down
End If
Next
End With
Application.ScreenUpdating = True
End Sub

Hahaha, ok, sorry.
Ich sehe schon, ich muss massivst an meiner Ausdrucksweise arbeiten.
Das Tabellenblatt „Projektplan“ ist das aktive Tabellenblatt. Habe davor an dem Makro rumgebastelt (auch eben mit anderen Tabellenblättern) und dann die Bezeichnung im Code gelassen, weil sie ja eigentlich nicht stören sollte.

Aber die Tabelle sollte schon so sein, wie in deinem Bild gezeigt.
Ich geh sie dann quasi mit dem Makro von unten nach oben durch und sobald ich die Bezeichnung „Easy Clip Vertonung“ finde soll er die erste Zeile kopieren und über der „Easy Clip Vertonung“-Zelle einfügen.

Aber ich glaube die Verwechslung zwischen der Zahl „1“ und dem Buchstaben „l“ könnte schon ein Knackpunkt sein, denn genau diese Zeile wurde mit markiert angezeigt.

Ich probier das später oder morgen mittag mal aus und komme bei Fragen gerne auf Dich zurück. :smile:

Vielen Dank

Hallo Frank,

Ich sehe schon, ich muss massivst an meiner Ausdrucksweise
arbeiten.

immer gut das mal ab und zu neu zu überprüfen.
Wenn du egal was, einen Weg, ein Problem schilderst
und das 5 mal und jedes Mal kommt „Hä?“ zurück so sollte
bei dir Handlungsbedarf sein.

Kommt das „Hä?“ nur von einem der 5, von mir, hast du kein
Ausdrucksproblem sondern ich ein Verstehensproblem *grien*

Aber aus der bisherigen Beitragsfolge heraus bin ich sicher
wir werden das schon hinkriegen.

Das Tabellenblatt „Projektplan“ ist das aktive Tabellenblatt.
Habe davor an dem Makro rumgebastelt (auch eben mit anderen
Tabellenblättern) und dann die Bezeichnung im Code gelassen,
weil sie ja eigentlich nicht stören sollte.

„nicht störend“ ?, das Gegenteil ist der Fall.
Bei sheets(„Projektplan“).Range(„A1“) ist klar
referenziert und ich muß nicht wissen was gerade das aktive
Blatt ist wie bei unreferenziertem Range(„A1“)

Genauer gesagt, wenn ich bei längerem Code auf die
Codezeile Range(„A1“)… stoße muß ich nicht im Code nach
oben scrollen um herauszufinden welches gerade das aktive Blatt
ist.

Aber ich glaube die Verwechslung zwischen der Zahl „1“ und dem
Buchstaben „l“ könnte schon ein Knackpunkt sein, denn genau
diese Zeile wurde mit markiert angezeigt.

Grundsätzlich bei Anfragen zu Codes, vom Debugger gemeldete
Fehler im Code sagen mit Fehlernummer, Fehlertext, Codezeile.

Ich probier das später oder morgen mittag mal aus und komme
bei Fragen gerne auf Dich zurück. :smile:

Gerne, bitte mit Beispielmappe und deinen Codes.
Und Infos über Fehlermeldungen usw.

Gruß
Reinhard

Hallo Reinhard,

ich möchte mich nochmals für Deine Hilfe bedanken. Alles funktioniert nun perfekt wie gewünscht. :smile:

In diesem Sinne vielen Dank und viele Grüße
Frank