Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1872to1876
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
Datensatz aus Tabelle in andere kopieren
09.03.2022 16:27:29
Steve
Hallo zusammen,
ich habe folgende Aufgabe:
Ich habe 6 gleich strukturierte Tabellenblätter mit gleich strukturierten Tabellen. Ich möchte nun mit einer

ComboBox
, die die Namen aller 6 Tabellenblätter enthält, auswählen in welches Tabellenblatt der aktuell mit dem Cursor selektierte Datensatz in die dortige Tabelle verschoben werden soll. D.h. Tabellenzeile, auf der der Cursor steht ausschneiden,

ComboBox

abfragen, in welches Blatt kopiert werden soll, und in die Tabelle dieses Blattes in der ersten freien Zeile Datensatz einfügen. Ideal wäre, wenn die

Combo Box
im Anschluss leer wäre um Fehlklicks zu vermeiden. (Dieses Makro wird mit einem weiteren cmdbtn ausgelöst).
Danke für eure Hilfe!!
Gruß
Steve

47
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datensatz aus Tabelle in andere kopieren
10.03.2022 09:30:15
Steve
Hallo zusammen,
ich habe mit dem Code, den ich bereits in meiner Mappe habe versucht etwas zu schreiben. Ich habe allerdings wirklich sehr sehr wenig Ahnung, was ich hier tue und habe bekomme auch gleich einen Fehler.
Allerdings ist das vielleicht etwas, um mal eine Rückmeldung zu erhalten..

Sub verschieben()
Dim wZ As Worksheet
Dim LR
Dim Maschine As Range
If Not Intersect(Selection, Range("B18:S2500")) Is Nothing Then
ActiveSheet.Unprotect
ThisWorkbook.Activate
Maschine = Ausw_kop_Stahl1.Value
With Selection.EntireRow
.Cut
Set wZ = SelectOrCreate(Maschine.Value)
Set Z = wZ.Range("D99999").End(xlUp)
If Z = "" Then Set Z = Z.End(xlUp).Offset(1) Else Set Z = Z.Offset(1)
Set Z = Z.EntireRow
Rows.Insert Shift:=xlDown
End With
ActiveSheet.Protect
Else
MsgBox "Aktive Zelle befindet sich nicht in der Tabelle"
End If
End Sub
Ich bedanke mich für eure Zeit und Mühe! :)
Gruß
Steve
Anzeige
AW: Datensatz aus Tabelle in andere kopieren
10.03.2022 12:22:01
Michael
Hallo Steve,
magst Du vielleicht eine abgespeckte Kopie der Datei hochladen? Nur damit vorstellbarer wird, in welchem Umfeld dein Code nicht will und welchen Fehler produziert.
Dein Problem mit der ComboBox scheint gelöst zu sein, oder?
Viele Grüße
Michael
AW: Datensatz aus Tabelle in andere kopieren
10.03.2022 13:47:11
Steve
Hallo Michael,
ehrlich gesagt weiß ich nicht, ob mein Problem mit der Combo Box gelöst ist. Ich habe diesen Code aus 2 Makros, die in meinen Tabellen funktionieren, zusammengesetzt. Und leider weiß ich dabei nicht so richtig, was ich tue..
Von mir gedacht war, die Combo Box (Ausw_kop-Stahl1) hier auszulesen:

Maschine = Ausw_kop_Stahl1.Value 
Der erste Fehler beim Kompilieren tritt hier auf:

Set wZ = SelectOrCreate(Maschine.Value) 
Er lautet Sub oder Function nicht definiert,

SelectOrCreate
markiert.
Mit der einfachen Beispielmppe tue ich mir gerade schwer da die Mappe mittlerweile recht umfangreich ist. Ich sollte das wohl mal angehen.
Danke erstmal für dein Feedback.
Gruß
Steve
Anzeige
AW: Datensatz aus Tabelle in andere kopieren
10.03.2022 14:19:00
Michael
Hallo Steve,
da wird der Compiler wohl recht haben ;-)
Hier mal eine kleine Beispieldatei, wie die Blattnamen in eine ComboBox kommen könnten. Bestimmt gibt es andere Wege, dieser ist schnell und einfach und ohne Code.
https://www.herber.de/bbs/user/151692.xlsm
Wird auf dem ersten Blatt in der gelben Zelle der Wert geändert, sollte eine MsgBox deren Inhalt wiedergeben. Wobei der Umweg über die Variable s gar nicht nötig wäre, aber dichter an Deinem Beispiel ist, denke ich.
VBA kann ich leider nicht sooo gut, dass ich Deinen Code blind in Deiner Mappe zum Laufen kriege. SET aber braucht man nur bei Objekten, meine ich, das müsstest Du immer weglassen können. Oder ist es bei Worksheets nötig? Wenn die Meldung "Objekt erforderlich" kommt, lass es weg. Bei Deinem nicht deklarierten Z sollte es entfallen können.
Vielleicht hilft Dir mein Beispiel ja wenigstens über die ersten Fehler Deines Codes hinweg.
Viele Grüße
Michael
Anzeige
AW: Datensatz aus Tabelle in andere kopieren
10.03.2022 15:03:34
Steve
Hallo Michael, hallo nochmal alle zusammen,
habe die Mappe nochmal aufbereitet und im Blatt "Stahl 1" nochmal versucht zu verdeutlichen, worum es mir geht. Sie ist leider zu groß für einen upload hier, deshalb der externe Link.
Ich danke schon Mal jedem, der sich damit befasst und Zeit und Mühe investiert!
Hier der Link
https://www.transfernow.net/de/dltransfer?utm_source=20220310YkZw4TFs
Viele Grüße
Steve
AW: Datensatz aus Tabelle in andere kopieren
10.03.2022 15:41:27
Michael
Hallo Steve,
da wich meine Vorstellung von Deinem Problem doch stark von der Wirklichkeit ab. Die ComboBox war für mich, siehe mein Beispiel von vorhin, etwas völlig anderes. Wie ich mit dieser umgehen muss, einen Wert aus ihr auslese, das müsste ich auch erst recherchieren. Dafür habe ich bei der Arbeit nebenbei dann leider doch nicht die Zeit.
Das Kopieren einer bestimmten Zeile und Einfügen an einer bestimmten Stelle wird Yal Dir wahrscheinlich im Halbschlaf hintippen ;-)
Entschuldige, aber ich muss hier aufgeben.
Viele Grüße
Michael
Anzeige
AW: Datensatz aus Tabelle in andere kopieren
10.03.2022 16:06:18
Steve
Hallo Michael,
vielen Dank für die Rückmeldung. Ich danke dir trotzdem für deine Hilfe :)
Viele Grüße
Steve
AW: Datensatz aus Tabelle in andere kopieren
10.03.2022 17:00:51
Michael
Nun war doch noch Zeit und es reizte mich der Lösung näher zu kommen. Außerdem hab ich mal ne zeitlin in VB programmiert, da sollte ich doch wohl rauskriegen, wie ich den Text einer Combobox ermittele...
So könnte ich mir das vorstellen:

Private Sub CommandButton1_Click()
If ActiveSheet.Name  Ausw_kop_Stahl1.Text Then
If Not Intersect(Selection, Range("B17:S2500")) Is Nothing Then
Selection.EntireRow.Cut Worksheets(Ausw_kop_Stahl1.Text).Range("A" & nächsteFreieZeile(Ausw_kop_Stahl1.Text))
' Nun ist auf dem Quellblatt eine Lücke entstanden...
' Wenn die weg soll, löschen:
'Selection.EntireRow.Delete
End If
End If
End Sub
Function nächsteFreieZeile(Blattname As String) As Integer
Dim z As Integer   ' Zeile
Dim s As Integer   ' Spalte
Dim i As Integer
For z = 17 To 2500
i = 0
For s = 3 To 19 ' Von C bis S
If Cells(z, s) = "" Then i = i + 1
Next s
If i = 17 Then  ' dann ist die Zeile leer
nächsteFreieZeile = z
Exit Function
End If
Next z
nächsteFreieZeile = z
End Function
Wobei die kleine, wahrscheinlich etwas plumpe Function bestimmt eleganter mit vba-Bordmitteln umgangen werden kann. Bei mir hat es geklappt. Eine Reihe Fragen, die dabei aufkamen, hab ich ignoriert...z.B. das Spalte M nie leer ist bis Zeile 76. Da wird dann auch die kopierte Zeile eingefügt...Wahrscheinlich nicht praktisch und nicht so gewollt. Aber das ließe sich vielleicht in der Function entsprechend anpassen?
VG Michael
Anzeige
AW: Datensatz aus Tabelle in andere kopieren
10.03.2022 18:00:06
Steve
Hallo Michael,
na da gibt es jetzt ja mal einen Ansatz, vielen Dank. Ich werde das morgen früh gleich mal ausprobieren.
Generell würde es genügen, die Art Nr. (Spalte D, glaube ich) auf Inhalt zu prüfen. Wie du sagst, das kann ich ja noch anpassen.
Danke nochmals, ich gebe dazu morgen nochmal eine Rückmeldung
Viele Grüße
Steve
AW: Datensatz aus Tabelle in andere kopieren
11.03.2022 08:44:47
Steve
Hallo zusammen,
ich habe den Code leicht angepasst, leider gibt es bei mir ein Problem.

Private Sub Versch_Stahl1_Click()
If ActiveSheet.Name  Ausw_kop_Stahl1.Text Then
If Not Intersect(Selection, Range("B17:S2500")) Is Nothing Then
Selection.EntireRow.Cut Worksheets(Ausw_kop_Stahl1.Value).Range("A" & nächsteFreieZeile(Ausw_kop_Stahl1.Value))
' Nun ist auf dem Quellblatt eine Lücke entstanden...
' Wenn die weg soll, löschen:
'Selection.EntireRow.Delete
End If
End If
End Sub
Function nächsteFreieZeile(Blattname As String) As Integer
Dim z As Integer   ' Zeile
Dim s As Integer   ' Spalte
Dim i As Integer
For z = 17 To 2500
i = 0
For s = 3 To 8 ' Von C bis H
If Cells(z, s) = "" Then i = i + 1
Next s
If i = 6 Then  ' dann ist die Zeile leer
nächsteFreieZeile = z
Exit Function
End If
Next z
nächsteFreieZeile = z
End Function
Wenn ich dieses Makro nun mit dem Cursor innerhalb der Tabelle ausführe, bekomme ich ein Meldung im Excel (kein Fehler), dass "KALKOM" bereits vorhanden ist. Ich kann mit "Ja" diese Version (die vorhanden ist) verwenden und mit "Nein", die Version, die ich verschieben will verwenden. "KALKOM" allerdings ist ein von mir benannter Bereich außerhalb der Tabelle (in Zeile 13). Warum dieser Bereich nun eine Rolle spielen soll, verstehe ich überhaupt nicht.
Danke dir Michael für die Hilfe! Ich finde den Ansatz super :)
Gruß
Steve
Anzeige
AW: Datensatz aus Tabelle in andere kopieren
11.03.2022 08:57:03
Steve
Mir fällt gerade noch ein dass eigentlich auch ein Blattschutz auf den Blättern liegt, den habe ich in meiner Beispieldatei gerade rausgenommen, da ich mit der Ausarbeitung beschäftigt war. Die Spalten I, J, L, M und T:AKP sind allesamt geschützt. An welcher Stelle kann ich denn in dem Code den Blattschutz für das Zielblatt rausnehmen zum einfügen und wieder setzten? Den Blattschutz kann man simulieren, indem man in den betroffenen Blättern einmal "Aktualisieren" klickt, dann ist er wieder gesetzt. Passwort steht im Code.
Vielen Dank für eure Zeit und Mühe
Gruß
Steve
AW: Datensatz aus Tabelle in andere kopieren
11.03.2022 10:11:33
Michael
Hallo Steve,
das steht doch ganz oft in dem ganzen anderen Code...:
Worksheets(Ausw_kop_Stahl1.Value).Unprotect "xyxyxyx" ' Das Passwort schreib ich hier nicht hin ;-)
vor
Selection.EntireRow.Cut Works...
und
Worksheets(Ausw_kop_Stahl1.Value).Protect Password:="xzxzxxz", AllowInsertingRows:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, userinterfaceonly:=True
Viele Grüße
Michael
dahinter.
Anzeige
AW: Datensatz aus Tabelle in andere kopieren
11.03.2022 10:58:01
Steve
Hmmm ja, eigentlich einfach. Mir war die Syntax für das Variable Blatt nicht geläufig. Danke dir!
AW: Datensatz aus Tabelle in andere kopieren
11.03.2022 10:01:54
Michael
Moin,
diese Meldung habe ich natürlich auch bekommen. Eine meiner häufig verwendeten Vorlagen hat dieses Problem auch entwickelt wenn ich manuell Grafik-Blätter kopiere. Ich wüsste auch zu gerne, wie ich das wegkriegen kann, was die Ursache ist.
Hier im Code könnte
Application.DisplayAlerts = True
vor
Selection.EntireRow.Cut Work...
und
Application.DisplayAlerts = false
dahinter helfen.
Viele Grüße
Michael
AW: Datensatz aus Tabelle in andere kopieren
11.03.2022 10:55:00
Steve
Hallo Michael,
die Meldung ist nun weg, habe noch True und False vertauscht ;). Leider ergibt sich nun das nächste Problem... Was auch immer Excel jetzt tut, ohne das Warnfenster zu beantworten, macht mir meine Berechnungen kaputt. Ich gehe gerade davon aus, dass "KALKOM" jetzt als Bereich aus dem Quellblatt in die Zieltabelle kopiert wird, und das zerstört die Bezüge meiner Formeln. Hinten ab Spalte "AEB" befinden sich Berechnungen, die "KALKOM" verwenden. Ich weiß nicht, ob sich das Problem auflöst, wenn ich hier keinen Namen sondern Zellbereiche verwende? Muss ich wohl ausprobieren. Vielen Dank für die Hilfe. Ich probier das wohl mal aus.

Private Sub Versch_Stahl1_Click()
If ActiveSheet.Name  Ausw_kop_Stahl1.Text Then
If Not Intersect(Selection, Range("B17:S2500")) Is Nothing Then
Worksheets(Ausw_kop_Stahl1.Value).Unprotect "xyxy"
Application.DisplayAlerts = False
Selection.EntireRow.Cut Worksheets(Ausw_kop_Stahl1.Value).Range("A" & nächsteFreieZeile(Ausw_kop_Stahl1.Value))
Selection.EntireRow.Delete
Application.DisplayAlerts = True
Worksheets(Ausw_kop_Stahl1.Value).Protect Password:="yxyx", AllowInsertingRows:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, userinterfaceonly:=True
End If
End If
End Sub
Function nächsteFreieZeile(Blattname As String) As Integer
Dim z As Integer   ' Zeile
Dim s As Integer   ' Spalte
Dim i As Integer
For z = 17 To 2500
i = 0
For s = 4 To 5 ' Von C bis H
If Cells(z, s) = "" Then i = i + 1
Next s
If i = 2 Then  ' dann ist die Zeile leer
nächsteFreieZeile = z - 1
Exit Function
End If
Next z
nächsteFreieZeile = z
End Function
So sieht das Makro jetzt aus. Ich musste "nächsteFreieZeile = z - 1" setzten, um an die Position zu kommen, an der eingefügt werden soll.
Viele Grüße
Steve
Anzeige
AW: Datensatz aus Tabelle in andere kopieren
11.03.2022 11:18:32
Steve
Aaalso,
ich habe mal nur in der Spalte AEB in der Quelle alle benannten Bereiche auf Addressierung geändert und dann mit unserem Makro ins Zielblatt kopiert. Komischerweise funktioniert jetzt die Berechnung im Zielblatt, bekomme keinen Fehler mehr obwohl dannach noch x-fach Formeln mit "KALKOM" in der Zeile kopiert und eingefügt werden.
Jetzt steht auch in jeder Formel mehrfach der Name Kalkom. Gefühlt wären das 10.000 Änderungen. Und um eventuelle Fehler später zu vermeiden würde ich die jetzt alle gern von "KALKOM" in "$A$13:$ADP$13" ändern. Kann man dafür nicht auch ein Makro benutzen? Wie müsste das denn aussehen? "KALKOM" in jeder Formel des aktuellen Blattes mit "$A$13:$ADP$13" ersetzten.
Danke für die Hilfe
Viele Grüße
Steve
Anzeige
AW: Datensatz aus Tabelle in andere kopieren
11.03.2022 11:53:24
Steve
Hallo,
ich habe nicht richtig hingeschaut. Alle Adressen in Formeln ab Spalte AEB im Zielblatt haben nach dem einfügen einen Bezug zum Quellblatt bekommen, was leider so nicht sein soll. Komischerweise sind die Fromeln in Spalte L und M davon nicht betroffen. (?) Vielleicht sollte man hier doch nur bis zur Spalte S kopieren, bis Spalte S im Ziel einfügen, und in der Quelle dann die gesamte Zeile löschen. Die Tabelle erweitert sich ja immer wieder automatisch mit Formeln. Bin mir allerdings wieder unschlüssig, wie das geht.
Yal hatte mir schonmal geholfen, die Daten auf diese Arbeitsblätter zu verteilen und dabei irgendwie auch Spaltenweise kopiert. Dass muss ich mir wohl nochmal anschauen.
Ich halte euch auf dem laufenden.
Viele Grüße
Steve
Danke euch
AW: Datensatz aus Tabelle in andere kopieren
11.03.2022 15:11:59
Michael
Hallo Steve,
bitte schaue mal in den Namensmanager. Den Namen KALKOM und ein paar andere gibt es x-mal. Das kann so nicht gewollt sein, hab ich so auch noch nicht gesehen. Vielleicht räumst Du da als erstes mal in einer KOPIE der Datei auf. Wenn das Problem weiterhin besteht, wäre das einen eigenen Thread wert, denke ich. Das muss sich irgendwie lösen lassen, ohne KALKOM in den Formeln ab Spalte AEB gegen den Bereich auszutauschen. Wozu kein Makro nötig wäre, das geht mit Suchen & Ersetzen (Strg+h) in Formeln (Bitte in KOPIE der Datei testen, wenn je nötig).
Schließlich zum "Problem" der Function, welche die nächste freie Zeile sucht.
Wenn es nur noch um zwei zu prüfende Zellen geht, würde ich auf eine Schleife verzichten; Exit For ist nicht ganz so brutal wie Exit Function und den Rückgabewert nur einmal zu übergeben ist auch schöner. Aber den Blattnamen zu übergeben und dann nicht weiter zu verwenden, lag gestern definitiv am nahenden Feierabend ;-)
So hat der Code auf dem Blatt, auf dem Du warst, nach der nächsten freien Zeile gesucht und dann an der Stelle auf dem anderen Blatt eingefügt. Dein "z - 1" half nur für Deinen konkreten Versuch weiter. Wenn Du Zeile 16 nie löscht, sondern nur ausblendest, bleib bei der 17. Und z bleibt z.

Function nächsteFreieZeile(Blattname As String) As Integer
Dim z As Integer   ' Zeile
With Worksheets(Blattname)
For z = 17 To 2500
If .Cells(z, 4) = "" And .Cells(z, 5) = "" Then Exit For
Next z
End With
nächsteFreieZeile = z
End Function
Ich habe immer auf dem Blatt "Stahl 1" den Button gedrückt und auf dem Blatt "Stahl 2" eingefügt.
Viele Grüße
Michael
AW: Datensatz aus Tabelle in andere kopieren
11.03.2022 16:12:51
Steve
Hallo Michael,
was muss ich denn hier als Blattname setzten? "Ausw_kop_Stahl1.Text" funktioniert nicht. Ich muss das doch wieder variabel nach meiner ComboBox gestalten, oder?
Danke für deine Antwort.
Viele Grüße
Steve
AW: Datensatz aus Tabelle in andere kopieren
11.03.2022 17:05:02
Michael
Hallo Steve,
Du rufst diese Funktion doch mit

Worksheets(Ausw_kop_Stahl1.Value).Range("B" & nächsteFreieZeile(Ausw_kop_Stahl1.Value))
auf. Das Variable dabei ist Ausw_kop_Stahl1.Value (Ausw_kop_Stahl1.Text ist hier wohl dasselbe), also der in der ComboBox ausgewählte Text.
Yal hatte das doch aus so gemacht - was ich erst nach meiner Antwort las -, mit z as Range gefällt mir der Code gleich viel besser.
Die Function wäre an einer Stelle gut aufgehoben, an der Du mit jeder ..._Click()-Sub drankommst, also nicht im gleichen "Textfenster", dem Code von Tabelle1,2,3, sondern einem Modul. Sonst brauchst die Function in jedem Tabellencode und wenn sich an ihr was ändern soll, musst Du das sechsmal machen.
VG Michael
AW: Datensatz aus Tabelle in andere kopieren
12.03.2022 14:05:46
Steve
Hallo Michael,

Function nächsteFreieZeile(Blattname As String) As Integer
Dim z As Integer   ' Zeile
With Worksheets(Blattname)
For z = 17 To 2500
If .Cells(z, 4) = "" And .Cells(z, 5) = "" Then Exit For
Next z
End With
nächsteFreieZeile = z
End Function
Hier steht aber doch dann "With Worksheets(Blattname)" und das ist dann doch nicht variabel? Verstehe ich gerade nicht.
Viele Grüße
Steve
AW: Datensatz aus Tabelle in andere kopieren
11.03.2022 13:57:40
Yal
Moin,
wenn man den Parameter "Blattname" eine Funktion übergibt, dann muss man etwas damit machen. Sonst ist es dem Zufall ergeben (genauer gesagt, je nach welche Blatt gerade aktiv ist), dass das passende Ergebnis daraus kommt:

Function ersteFreieZeile(Blattname As String) As Integer
Dim z As Range   ' Zelle
With Worksheets(Blattname)
For Each z In .Range(.Cells(17, 4), .Cells(2500, 4)).Cells
If z.Value & z.Offset(0, 1).Value = "" Then Exit For
Next z
End With
ersteFreieZeile = z.Row
End Function
VG
Yal
AW: Datensatz aus Tabelle in andere kopieren
11.03.2022 14:56:41
Steve
Hallo zusammen,
Für mein Verständnis müsste ich meine Daten erst von D1:H1, dann K1 und danach N1:O1 einfügen um die Formeln in den anderen Zellen nicht zu überschreiben, so ist gerade mein Stand. Das macht mir gerade wieder neue Probleme. Um die zu lösen bräuchte ich wirklich mehr VBA Kenntnisse.
Also das Makro sieht jetzt so aus:

Private Sub Versch_Stahl1_Click()
If ActiveSheet.Name  Ausw_kop_Stahl1.Text Then
If Not Intersect(Selection, Range("B17:S2500")) Is Nothing Then
Worksheets(Ausw_kop_Stahl1.Value).Unprotect "suse"
Application.DisplayAlerts = False
Selection.Range("B1:H1").Cut Worksheets(Ausw_kop_Stahl1.Value).Range("B" & nächsteFreieZeile(Ausw_kop_Stahl1.Value))
Selection.Range("K1").Cut Worksheets(Ausw_kop_Stahl1.Value).Range("K" & nächsteFreieZeile(Ausw_kop_Stahl1.Value))
Selection.Range("N1:S1").Cut Worksheets(Ausw_kop_Stahl1.Value).Range("N" & nächsteFreieZeile(Ausw_kop_Stahl1.Value))
' Nun ist auf dem Quellblatt eine Lücke entstanden...
' Wenn die weg soll, löschen:
Selection.EntireRow.Delete
Application.DisplayAlerts = True
Worksheets(Ausw_kop_Stahl1.Value).Protect Password:="suse", AllowInsertingRows:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, userinterfaceonly:=True
End If
End If
End Sub
Function nächsteFreieZeile(Blattname As String) As Integer
Dim z As Integer   ' Zeile
Dim s As Integer   ' Spalte
Dim i As Integer
For z = 17 To 2500
i = 0
For s = 4 To 7 ' Von C bis H
If Cells(z, s) = "" Then i = i + 1
Next s
If i = 4 Then  ' dann ist die Zeile leer
nächsteFreieZeile = z
Exit Function
End If
Next z
nächsteFreieZeile = z
End Function
Was jetzt passiert, interpretiere ich so, dass B1:H1 jetzt ab der aktuellen Cursorposition markiert und kopiert, also wenn der Cursor in Spalte E steht dann kopiere ich jetzt eigentlich E1:K1 und füge das dann ein. Das soll so aber nicht sein. Unabhängig vom Cursor, dieser soll nur die zu kopierende Zeile angeben, muss B1:H1 kopiert werden.... Wie mache ich das hier? Ich brauche nochmal Hilfe..
Danke für den Einwand Yal, ich habe auch nach einigem testen bemerkt, dass manchmal in Zeile 2501 eingefügt wird, manchmal in vorhandene Zeilen und manchmal richtig, ich werde das in das Makro mit aufnehmen.
Viele Grüße
Steve
AW: Datensatz aus Tabelle in andere kopieren
11.03.2022 15:43:27
Michael
Hallo Steve,
ganz verstehe ich das neue Problem nicht, aber könnte es sein dass Du

Selection.Range("B1:H1").Cut Worksheets(Ausw_kop_Stahl1.Value).Range("B" & nächsteFreieZeile(Ausw_kop_Stahl1.Value))
Selection.Range("K1").Cut Worksheets(Ausw_kop_Stahl1.Value).Range("K" & nächsteFreieZeile(Ausw_kop_Stahl1.Value))
Selection.Range("N1:S1").Cut Worksheets(Ausw_kop_Stahl1.Value).Range("N" & nächsteFreieZeile(Ausw_kop_Stahl1.Value))
nur "andersrum" ausführen muss? Also von rechts nach links:

Selection.Range("N1:S1").Cut Worksheets(Ausw_kop_Stahl1.Value).Range("N" & nächsteFreieZeile(Ausw_kop_Stahl1.Value))
Selection.Range("K1").Cut Worksheets(Ausw_kop_Stahl1.Value).Range("K" & nächsteFreieZeile(Ausw_kop_Stahl1.Value))
Selection.Range("B1:H1").Cut Worksheets(Ausw_kop_Stahl1.Value).Range("B" & nächsteFreieZeile(Ausw_kop_Stahl1.Value))
Es wird ja ausgeschnitten! Was erst Spalte K ist, ist nach Schritt 1 nicht mehr K, sondern...
Oder vielleicht vorm Ausschneiden die ganze Zeile, von der nur eine Zelle die Selection ist, markieren: Selection.EntireRow.Select ?
Dann sollte es die Bereiche geben, die Du ansprichst.
VG
Michael
AW: Datensatz aus Tabelle in andere kopieren
11.03.2022 16:24:06
Steve
Hallo Michael,
das bekomme ich so nicht hin, es läuft nach dem gleichen Schema ab, auch wenn ich die gesamte Zeile markiere.
Danke auch für diese Antwort :)
Viele Grüße
Steve
AW: Datensatz aus Tabelle in andere kopieren
11.03.2022 16:41:31
Yal
Hallo Steve,
Du verwendest aktive Tabelle. Eigentlich sollten diese aktive Tabelle gar keine leere Zeilen haben.
Wenn eine Zeile am Ende eine aktive Tabelle hinzugefügt wird, werden alle Formel automatisch von der vorhige Zeile übernommen, sodass es gar kein Bedarf gibt, Zeilen mit Formeln vorrätig zu halten.
VG
Yal
AW: Datensatz aus Tabelle in andere kopieren
12.03.2022 14:09:49
Steve
Hallo Yal,
ja das ist richtig, es wird allerdings vorkommen dass es leere Tabellenzeilen geben wird bei der Nutzung dieser Planung. Wenn auch erst eine neue Zeile entsteht beim kopieren sollte hier aber keine der Formeln gleich überschrieben werden. Für mich wäre es am sichersten, nur die Information, die wirklich verschoben werden soll an der richtigen Stelle einzufügen.
Viele Grüße
Steve
AW: Datensatz aus Tabelle in andere kopieren
12.03.2022 15:09:51
Steve
Hallo Yal,
du hast mir doch schon mal mit diesem Sahnestück Code geholfen, wäre das für das Problem hier nicht ähnlich möglich?

Private Sub Auftr_kop_M1_Click()
ActiveSheet.Unprotect "suse"
Dim wZ As Worksheet
Dim LR
Dim Maschine As Range
Dim Merker As Range
ThisWorkbook.Activate
With Worksheets("Aufträge").ListObjects("Aufträge1")
For Each LR In .ListRows
Set LR = LR.Range.EntireRow
If Not LR.Hidden Then
Set Maschine = Intersect(LR, .ListColumns("Spalte19").Range)
Set Merker = Intersect(LR, .ListColumns("Spalte22").Range)
Set Artikel = Intersect(LR, .ListColumns("Spalte3").Range)
Set Beschreibung = Intersect(LR, .ListColumns("Spalte4").Range)
Set Menge = Intersect(LR, .ListColumns("Spalte6").Range)
Set Fertigungszeit = Intersect(LR, .ListColumns("Spalte10").Range)
Set Meilenstein = Intersect(LR, .ListColumns("Spalte14").Range)
Set Beschichtung = Intersect(LR, .ListColumns("Spalte18").Range)
If Merker.Value = "" And Maschine.Value  "" And Artikel.Value  "" And Beschreibung.Value  "" And Menge.Value  "" And Meilenstein.Value  "" And Beschichtung.Value  "" And Fertigungszeit.Value  "" Then
Set wZ = SelectOrCreate(Maschine.Value)
Set z = wZ.Range("D99999").End(xlUp)
If z = "" Then Set z = z.End(xlUp).Offset(1) Else Set z = z.Offset(1)
Set z = z.EntireRow
z.Range("D1:H1") = LR.Range("C1:G1").Value
z.Range("K1") = LR.Range("J1").Value
z.Range("O1") = LR.Range("N1").Value
z.Range("Q1:S1") = LR.Range("P1:R1").Value
Merker.Value = "ü"
Merker.Font.Name = "Wingdings"
End If
End If
Next
End With
ActiveSheet.Protect Password:="suse", AllowInsertingRows:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, userinterfaceonly:=True
End Sub
Wie bekomme ich denn gerade diesen Teil, bei dem nur die Werte eingefügt werden und keine Bezüge in den Formeln des Zielblattes dabei zerstört werden, in meine aktuelle Aufgabe integriert?

z.Range("D1:H1") = LR.Range("C1:G1").Value
z.Range("K1") = LR.Range("J1").Value
z.Range("O1") = LR.Range("N1").Value
z.Range("Q1:S1") = LR.Range("P1:R1").Value
Ich bekomme das leider nicht auf die Kette. Ich habe von VBA wirklich keine Ahnung, mir ist generell schon bewusst, was getan werden sollte aber mir fehlen grundsätzlich alle Möglichkeiten der Syntax, habe keine Ahnung von dem, wie das in Code dann Aussehen muss.
Also bitte ich dich nochmal um deine Unterstützung und hoffe du hast ein bisschen Zeit für diese Thematik. Das wäre großartig.
Ich wünsche ein schönes Wochenende
Viele Grüße
Steve
AW: Datensatz aus Tabelle in andere kopieren
12.03.2022 17:03:54
Steve
Hallo zusammen,
Ich habe ein bisschen rumprobiert, doch leider komme ich nicht weiter als das mein "LR" und "Selection" nicht Typen kompatibel sind. Aber vielleicht irgendwie so?

Private Sub Versch_Stahl1_Click()
Dim wZ As Worksheet
Dim LR
Dim AR
If ActiveSheet.Name  Ausw_kop_Stahl1.Text Then
If Not Intersect(Selection, Range("B17:S2500")) Is Nothing Then
Worksheets(Ausw_kop_Stahl1.Text).Unprotect "suse"
With Worksheets("Stahl 1").ListObjects("ProdplanStahl1")
For Each LR In .ListRows
If Not Intersect(Selection, LR) Is Nothing Then
Set LR = LR.Range.EntireRow
Set wZ = Ausw_kop_Stahl1.Value
Set z = wZ.Range("D99999").End(xlUp)
If z = "" Then Set z = z.End(xlUp).Offset(1) Else Set z = z.Offset(1)
Set z = z.EntireRow
z.Range("D1:H1") = Selection.Range("D1:H1").Value
z.Range("K1") = Selection.Range("K1").Value
z.Range("N1:S1") = Selection.Range("N1:S1").Value
End If
Next
End With
End If
End If
Selection.EntireRow.Delete
Worksheets(Ausw_kop_Stahl1.Text).Protect Password:="suse", AllowInsertingRows:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, userinterfaceonly:=True
End Sub

AW: Datensatz aus Tabelle in andere kopieren
14.03.2022 11:51:08
Michael
Hallo nochmal,
wenn Du Variablen definierst, versehe sie mit einem Datentypen. LR soll eine Range sein, oder? So ist ist ein sog. "Variant", das kann alles sein und Excel füllt rein, was geht bis es irgendwann nicht mehr geht. So ganz hab ich das Konzept nicht verstanden...aus anderen Sprache kenne ich das nicht. Da werden Variablen gezwungenermaßen vollständig deklariert. In vba mache ich das möglichst auch so und wundere mich nicht, welche Typen nicht zusammenpassen.
LR dürfte bei Dir zum ListRows-Objekt "geworden sein" (For Each LR In .ListRows). Selection ist eine Range. Das passt nicht mehr zusammen (Intersect(Selection, LR)).
VG Michael
AW: Datensatz aus Tabelle in andere kopieren
14.03.2022 13:29:42
Steve
Hallo Michael,
dein Hinweis hat mich dazu gebracht "Set LR = LR.Range.EntireRow" vor "If Not Intersect...." zu ziehen und siehe da, es wird hier nichts mehr bemängelt.
Jetzt sieht der Code hier so aus...

Sub Versch_Stahl1_Click()
Dim wZ As Worksheet
Dim Maschine As Range
Dim LR
If ActiveSheet.Name  Ausw_kop_Stahl1.Text Then
If Not Intersect(Selection, Range("B17:S2500")) Is Nothing Then
Worksheets(Ausw_kop_Stahl1.Text).Unprotect "suse"
With Worksheets("Stahl 1").ListObjects("ProdplanStahl1")
For Each LR In .ListRows
Set LR = LR.Range.EntireRow
If Not Intersect(Selection, LR) Is Nothing Then
Set wZ = ActiveWorkbook.Sheets("Ausw_kop_Stahl1.Text")
Set z = wZ.Range("D99999").End(xlUp)
If z = "" Then Set z = z.End(xlUp).Offset(1) Else Set z = z.Offset(1)
Set z = z.EntireRow
z.Range("D1:H1") = Selection.Range("D1:H1").Value
z.Range("K1") = Selection.Range("K1").Value
z.Range("N1:S1") = Selection.Range("N1:S1").Value
End If
Next
End With
End If
End If
Selection.EntireRow.Delete
Worksheets(Ausw_kop_Stahl1.Text).Protect Password:="suse", AllowInsertingRows:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, userinterfaceonly:=True
End Sub
Der neueste Fehler hier, den ich auch nicht lösen kann ist "Laufzeitfehler 9: Index außerhalb der gültigen Bereichs" bei "Set wZ = ActiveWorkbook.Sheets("Ausw_kop_Stahl1.Text")"
Für mich ist gerade, obwohl ich jetzt eine andere Lösung habe noch sehr interessant, ob mit diesem Ansatz vielleicht auch noch was zu erreichen ist....
Viele Grüße
Steve
AW: Datensatz aus Tabelle in andere kopieren
14.03.2022 15:55:47
Michael
Hallo Steve,
der Fehler ist typisch, wenn ein Blatt referenziert wird, das es nicht gibt.
Die Anführungsstriche müssen weg. So übergibst Du den Namen "Ausw_kop_Stahl1.Text" und so heißt kein Blatt Deiner Mappe.
Noch eine stilistische Feinheit. Bei den Events haben wir in vb grundsätzliche Gegebenheiten, bei denen das Event nicht ausgeführt werden soll, als "Türsteher" obendrüber geschrieben und nicht als IFs außendrum. Der Vorteil: der Code rückt nicht immer weiter ein (früher waren die Bildschirme schmaler...). Ein Beispiel: Aus

If ActiveSheet.Name  Ausw_kop_Stahl1.Text Then ...und irgendwann... End if
wird der Einzeiler

If ActiveSheet.Name = Ausw_kop_Stahl1.Text Then Exit Sub
Viele Grüße
Michael
AW: Datensatz aus Tabelle in andere kopieren
14.03.2022 16:36:15
Steve
Hallo Michael,
das klingt jetzt sehr logisch und das hätte ich mittlerweile auch sehen können. Vielen Dank.
Es ist jetzt so dass folgendes Makro, insofern der Cursor im Quellblatt in der Spalte "Art.Nr." steht nun auch genau richtig in die anderen Blätter kopiert. Das ganze hängt aber jetzt anscheinend von der Cursorposition ab. Ich muss sagen das kopieren läuft ohne umschalten der Blätter ab, was mir sehr gefällt.
Jetzt müsste ich noch rausfinden, warum es nur nur richtig kopiert wird, wenn der Cursor in der richtigen Spalte der Quelle steht....

Sub Versch_Stahl1_Click()
Dim wZ As Worksheet
Dim LR
If ActiveSheet.Name  Ausw_kop_Stahl1.Text Then
If Not Intersect(Selection, Range("B17:S2500")) Is Nothing Then
Worksheets(Ausw_kop_Stahl1.Text).Unprotect "suse"
With Worksheets("Stahl 1").ListObjects("ProdplanStahl1")
For Each LR In .ListRows
Set LR = LR.Range.EntireRow
If Not Intersect(Selection, LR) Is Nothing Then
Set wZ = ActiveWorkbook.Sheets(Ausw_kop_Stahl1.Text)
Set z = wZ.Range("D99999").End(xlUp)
If z = "" Then Set z = z.End(xlUp).Offset(1) Else Set z = z.Offset(1)
Set z = z.EntireRow
z.Range("D1:H1") = Selection.Range("A1:E1").Value
z.Range("K1") = Selection.Range("H1").Value
z.Range("N1:S1") = Selection.Range("K1:P1").Value
End If
Next
End With
End If
End If
Selection.EntireRow.Delete
Worksheets(Ausw_kop_Stahl1.Text).Protect Password:="suse", AllowInsertingRows:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, userinterfaceonly:=True
End Sub
Damit werde ich noch ein paar Versuche machen... Melde mich natürlich wieder.
Michael, nochmal vielen vielen Dank für deine Zeit :)
Viele Grüße
Steve
AW: Datensatz aus Tabelle in andere kopieren
14.03.2022 16:54:41
Michael
Hallo Steve,
aber mit diesen Zeilen

z.Range("D1:H1") = Selection.Range("A1:E1").Value
z.Range("K1") = Selection.Range("H1").Value
z.Range("N1:S1") = Selection.Range("K1:P1").Value
muss doch immer dasselbe an dieselbe Stelle kopiert werden...
Die Einsen müssen genauso variable werden wie in der anderen Version dieser Sub.
z soll doch die Zielzeile sein, die Quelle ist die Selection...das müsste doch sowas werden:

z.Range("D" & z.Row &":H"& z.Row) = Range("A" & Selection.Row &":E" & Selection.Row).Value
Oder bin ich jetzt völlig auf dem Holzweg ;-) ?
VG Michael
AW: Datensatz aus Tabelle in andere kopieren
14.03.2022 17:33:31
Steve
Hallo Michael,
ich nehme an, dass ich nirgendwo die gesamte Zeile der "Selection" auswähle und dann "A1" mit der selektierten Zelle beginnt? Ich weiß es wirklich nicht und hoffe hier ja auch schon länger auf Yal, von dem dieser Code stammt. Der allerdings denkt sich anscheinend "du kannst hier noch sehr viel lernen junger padawan" und sagt lieber gar nichts ;))
Ich werde deinen Vorschlag gleich morgen früh testen und melde mich dann natürlich.
Viele Grüße
Steve
AW: Datensatz aus Tabelle in andere kopieren
15.03.2022 09:18:49
Steve
Hallo Michael,
so funktioniert es unabhängig von der aktuellen Cursorposition, respektive der aktuellen Zelle:

Sub Versch_Stahl1_Click()
Dim wZ As Worksheet
Dim LR
If ActiveSheet.Name  Ausw_kop_Stahl1.Text Then
If Not Intersect(Selection, Range("B17:S2500")) Is Nothing Then
Worksheets(Ausw_kop_Stahl1.Text).Unprotect "suse"
With Worksheets("Stahl 1").ListObjects("ProdplanStahl1")
For Each LR In .ListRows
Set LR = LR.Range.EntireRow
If Not Intersect(Selection, LR) Is Nothing Then
Set wZ = ActiveWorkbook.Sheets(Ausw_kop_Stahl1.Text)
Set z = wZ.Range("D99999").End(xlUp)
If z = "" Then Set z = z.End(xlUp).Offset(1) Else Set z = z.Offset(1)
Set z = z.EntireRow
z.Range("D1:H1") = LR.Range("D1:H1").Value
z.Range("K1") = LR.Range("K1").Value
z.Range("N1:S1") = LR.Range("N1:S1").Value
End If
Next
End With
End If
End If
Selection.EntireRow.Delete
Worksheets(Ausw_kop_Stahl1.Text).Protect Password:="suse", AllowInsertingRows:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, userinterfaceonly:=True
End Sub
So wie ich das jetzt verstehe läuft das dann folgendermaßen ab:(?)

With Worksheets("Stahl 1").ListObjects("ProdplanStahl1")
For Each LR In .ListRows
Set LR = LR.Range.EntireRow
Inhalte der Tabelle werden aufgelistet; in LR wird die ganze Zeile hinterlegt

If Not Intersect(Selection, LR) Is Nothing Then
aus der Liste wird nun der Datensatz, auf dem die aktuelle Zelle steht ausgewählt

z.Range("D1:H1") = LR.Range("D1:H1").Value
z.Range("K1") = LR.Range("K1").Value
z.Range("N1:S1") = LR.Range("N1:S1").Value
Der gewählte Datensatz in der Quelle steht in der Auflistung nun in Zeile 1, die frei Zeile im Ziel wurde vorher auch irgendwie ermittelt und hier wird auch in Zeile 1 eingefügt. Mit der Änderung von "Selection" auf "LR" ist nun die gesamte Zeile der Quelle ausgewählt durch LR = LR.Range.EntireRow. und damit spielt die Cursorposition keine Rolle mehr beim kopieren.
So verstehe ich das jetzt mit meinem Halbwissen.
In jedem Fall macht auch dieses Makro nun das, was es soll. ich werde es weiter testen.
Vielen Dank nochmal für deine Hilfe Michael!
Viele Grüße
Steve
AW: Datensatz aus Tabelle in andere kopieren
15.03.2022 12:02:22
Michael
Hallo Steve,
mit ListObjects hatte ich noch nix zu tun, darum kann ich Dir nicht sagen, ob Deine Theorie der Arbeitsweise des Codes richtig ist.
Aber sehr schön, dass er funktioniert.
Weiterhin viel Erfolg!
Und viele Grüße
Michael
AW: Datensatz aus Tabelle in andere kopieren
11.03.2022 17:38:50
Michael
Hallo Steve,
wenn Du B1:H1 hinschreibst, wirst Du auch genau das selektieren und ausschneiden, egal, was sonst noch so in der Zeile vorkommt.
Aus Selection.Range("B1:H1").Cut müsste sowas wie Selection.Range("B" & Selection.Row & ":H" & Selection.Row).Cut werden.
Das hab ich in einer neuen Arbeitsmappe mit

Sub test()
'Selection.Range("B" & Selection.Row & ":H" & Selection.Row).Select
MsgBox Selection.Row
i = Selection.Row
Selection.Range("B" & i & ":H" & i).Select
End Sub
getestet und unerwartetes Verhalten beobachtet. Mit und ohne i und auch mit der ActiveCell.Row statt der Selection.Row.
...
Lass das Selection weg! Am Anfang!
So:

Range("N" & Selection.Row & ":S" & Selection.Row).Cut Worksheets(Ausw_kop_Stahl1.Text).Range("N" & nächsteFreieZeile(Ausw_kop_Stahl1.Text))
Range("K" & Selection.Row).Cut Worksheets(Ausw_kop_Stahl1.Text).Range("K" & nächsteFreieZeile(Ausw_kop_Stahl1.Text))
Range("B" & Selection.Row & ":H" & Selection.Row).Cut Worksheets(Ausw_kop_Stahl1.Text).Range("B" & nächsteFreieZeile(Ausw_kop_Stahl1.Text))
Wenn auf dem Zielblatt beim Einfügen was verrutscht, dann vielleicht weil dort wirklich die ausgeschnittenen Zellen eingefügt werden, nicht nur Inhalte. Wenn Du statt .Cut .Copy nimmst, passiert das möglicherweise nicht. Da Du die gesamte Quellzeile schließlich löscht, dürfte einerlei sein, ob von dort kopierst oder ausschneidest.
Nun werde ich Wochenende machen und womöglich vor Montag nicht wieder am Rechner sitzen. Ich guck dann aber wieder.
Viele Grüße
Michael
AW: Datensatz aus Tabelle in andere kopieren
12.03.2022 14:32:09
Steve
Hallo zusammen,
Mit deiner Änderung wird jetzt alles dort eingefügt, wo es hingehört. In meinen Formeln in Spalte L und M werden allerdings immernoch aus irgendeinem Grund Bezüge der Fromeln beim kopieren kaputt gemacht.
Kann ich jetzt, wo das ganze stimmt denn nicht irgendwie nur "Werte einfügen"? Ich möchte eigentlich auch nur die Werte kopieren und einfügen, alles was es sonst braucht ist in den Tabellen vorhanden! Und dadurch, dass nun Zellen kopiert und eingefügt werden wird die Operation für mich gefühlt fehleranfällig.
Danke für eure Zeit
Viele Grüße
Steve
AW: Datensatz aus Tabelle in andere kopieren
12.03.2022 14:54:40
Steve

Range("N" & Selection.Row & ":S" & Selection.Row).Cut Worksheets(Ausw_kop_Stahl1.Text).Range("N" & nächsteFreieZeile(Ausw_kop_Stahl1.Text).Value)
Range("K" & Selection.Row).Cut Worksheets(Ausw_kop_Stahl1.Text).Range("K" & nächsteFreieZeile(Ausw_kop_Stahl1.Text).Value)
Range("B" & Selection.Row & ":H" & Selection.Row).Cut Worksheets(Ausw_kop_Stahl1.Text).Range("B" & nächsteFreieZeile(Ausw_kop_Stahl1.Text).Value)
Leider funktioniert das so wohl nicht, nun wird "nächsteFreieZeile" ungültig. @.@
Bin mittlerweile schon frustriert oh Mann. 5 Tage um eine Zeile zu kopieren und einzufügen..
Ich wünsche allen ein schönes Wochenende
Viele Grüße
Steve
AW: Datensatz aus Tabelle in andere kopieren
13.03.2022 16:11:34
Michael
Hallo Steve,
lass mal bitte am Ende der Zeilen das ".Value" weg. Das ergibt keinen Sinn und war vorher auch nicht da.
Ach so, verstehe, zum Einfügen der Werte...dann bitte ganz hinten dran:
Range("N" & Selection.Row & ":S" & Selection.Row).Cut Worksheets(Ausw_kop_Stahl1.Text).Range("N" & nächsteFreieZeile(Ausw_kop_Stahl1.Text)).Value
Die Range am Anfang jeder Zeile sollte sich eigentlich auf das ActiveSheet beziehen, wo Du eben gerade auf den Knopp gedrückt hast. Um das aber ganz sicherzustelle, könnte eine "With ActiveSheet" um die drei Zeilen geschrieben und jeder Zeile dann ein Punkt vorangestellt werden: ".Range(..."
Den Text der ComboBox hab ich mit Ausw_kop_Stahl1.Text ausgelesen, Yal mit .Value. In deinem Fall ist das das Gleiche. Ich würde mich in Deiner Sub nur für eines von beidem entscheiden (neulich war noch beides in Verwendung), dem String ggf. eine Variable spendieren, so oft wie er verwendet wird, dann musst Du wenn's mal sein muss nur einmal ändern.
Viele Grüße
Michael
AW: Datensatz aus Tabelle in andere kopieren
13.03.2022 16:20:13
Michael
Nein, aber das mit dem ".Value" hinten dran wird auch nicht funktionieren. Stattdessen ".PasteSpecial Paste:=xlValues" hatte ich glaube ich schon mal versucht. Das aber wird Yal wissen, ohne lange rumzuprobieren.
AW: Datensatz aus Tabelle in andere kopieren
13.03.2022 17:26:10
Steve
Hallo Michael,
".Value" außerhalb der letzten Klammer hatte ich gestern auch versucht, das funktionierte so leider auch nicht. Und ja, mir gings dabei darum, wirklich nur den Wert einzufügen.
Viele Grüße
Steve
AW: Datensatz aus Tabelle in andere kopieren
14.03.2022 11:22:29
Michael
Hallo Steve,
".PasteSpecial Paste:=xlValues" hinten an Deine .Cut-Zeile dranzuhängen geht nicht. Bei Cut hilft es auch nicht, wenn das Einfügen in der nächsten CodeZeile passiert. Wohl aber bei Copy! Eine deiner Cut-Zeilen mal als Beispiel:
Aus

Range("N" & Selection.Row & ":S" & Selection.Row).Cut Worksheets(Ausw_kop_Stahl1.Text).Range("N" & nächsteFreieZeile(Ausw_kop_Stahl1.Text))
wird

ActiveSheet.Range("N" & Selection.Row & ":S" & Selection.Row).Copy
Worksheets(Ausw_kop_Stahl1.Text).Range("N" & nächsteFreieZeile(Ausw_kop_Stahl1.Text)).PasteSpecial Paste:=xlValues
Die Quellzeile wird ja schließlich gelöscht, insofern sollte egal sein, ob von dort kopiert oder ausgeschnitten wird.
In der Zielzeile sollte so auch nichts mehr verrutschen, denn es werden keine Zellen mehr eingefügt.
Tut mir leid, wenn ich nicht alles mit Deiner Datei testen kann. Manchmal hab ich die Zeit für sowas, heute eher nicht. Die Datei ist schon ein ziemliches Monster...!
Viele Grüße
Michael
AW: Datensatz aus Tabelle in andere kopieren
14.03.2022 12:06:15
Steve
Hallo Michael, hallo zusammen
danke erstmal für die weitere Hilfe an dich, ohne dich wäre ich gerade ziemlich aufgeschmissen :)
Die Änderung scheint jetzt zu bewirken, dass alles jetzt so getan wird, wie ich es hier brauche.
Das Makro sieht dann nun so aus:

Private Sub Versch_Stahl1_Click()
If ActiveSheet.Name  Ausw_kop_Stahl1.Text Then
If Not Intersect(Selection, Range("B17:S2500")) Is Nothing Then
Worksheets(Ausw_kop_Stahl1.Text).Unprotect "suse"
ActiveSheet.Range("N" & Selection.Row & ":S" & Selection.Row).Copy
Worksheets(Ausw_kop_Stahl1.Text).Range("N" & ersteFreieZeile(Ausw_kop_Stahl1.Text)).PasteSpecial Paste:=xlValues
ActiveSheet.Range("K" & Selection.Row).Copy
Worksheets(Ausw_kop_Stahl1.Text).Range("K" & ersteFreieZeile(Ausw_kop_Stahl1.Text)).PasteSpecial Paste:=xlValues
ActiveSheet.Range("D" & Selection.Row & ":H" & Selection.Row).Copy
Worksheets(Ausw_kop_Stahl1.Text).Range("D" & ersteFreieZeile(Ausw_kop_Stahl1.Text)).PasteSpecial Paste:=xlValues
Selection.EntireRow.Delete
Worksheets(Ausw_kop_Stahl1.Text).Protect Password:="suse", AllowInsertingRows:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, userinterfaceonly:=True
End If
End If
End Sub
Function ersteFreieZeile(Blattname As String) As Integer
Dim z As Range   ' Zelle
With Worksheets(Blattname)
For Each z In .Range(.Cells(17, 4), .Cells(2500, 4)).Cells
If z.Value & z.Offset(0, 1).Value = "" Then Exit For
Next z
End With
ersteFreieZeile = z.Row
End Function
Ich werde es noch einigen Tests unterziehen und melde mich dazu nochmal. Erstmal vielen vielen Dank für dieses Ergebnis!
Viele Grüße
Steve
AW: Datensatz aus Tabelle in andere kopieren
10.03.2022 14:34:53
Yal
Hallo Steve,
ja, Du bist der blanke Anfänger und das kann am Anfang schmerzhaft sein. Aber jeder Kind steht wieder auf.
Dir fehlen ziemlich viel Basics. Schreibe daher immer zuerst kleine Schnippsel und versuche zu verstehen, was daran richtig ist (oder eben nicht)
Zu deiner Frage:
"auswählen in welches Tabellenblatt der aktuell mit dem Cursor selektierte Datensatz in die dortige Tabelle verschoben werden soll. D.h. Tabellenzeile, auf der der Cursor steht ausschneiden"
Diese Anforderung istentstanden, weil um eine Aktion anzustossen, Du eine Schaltfläsche brauchst, der nur in einer bestimme Tabelle vorliegt. Dann musst Du zuerst dorthin gehen, und Excel weisst nicht mehr, wo Du gerade warst.
Die Lösung hast Du, wenn Du die Makro einem Tastenkombination ("Strg+ ?") zuweist. So kann eine Makro von überall gestartet werden. Die Tastenkombi wird zugewiesen, in dem Du in Excel ("in Excel" als Gegenteil von "in VB Editor") Alt+F8, das Makro markierst und auf Optionen... gehst.
Alt+F8, dann Makro auswählen wäre auch eine "günstige" Möglichkeit.
Mache den Test mit einem einfachen Code

Sub Test_Strg_p()
MsgBox "Wir befinden uns in " & vbCr & ActiveSheet.Name
End Sub
Dann Alt+F8, Optionen Strg+p zuweisen. Testen.
Wobei wenn ich den Code nochmal anschaue: Du stehst in der Übersicht und möchte die aktuelle Zeile in eine Zielblatt versetzen. Der Name der Zielblatt steht in Spalte für Maschine, z.B. "M":

Sub Test_Strg_p()
MsgBox "Wir befinden uns in " & vbCr & ActiveSheet.Name & vbCr & "das Zielblatt ist" & vbCr & Selection.EntireRow.Cells(1, "M").value 'M durch richtige Spalte ersetzen
End Sub
VG
Yal
AW: Datensatz aus Tabelle in andere kopieren
10.03.2022 15:08:40
Steve
Hallo Yal, hallo nochmal alle zusammen,
Im Moment weiß ich wirklich nicht, wie ich an die Sache ran gehen soll. Die Auswahlliste und Button zum ausführen des fehlenden Makros habe ich in die Mappe eingepflegt. Jetzt weiß ich aber auch nicht, wie ich die Liste abfrage im VBA Code und wie ich dann wirklich die Zeile in ein anderes Blatt verschiebe ist mir eigentlich auch schleierhaft...
Ich habe die Mappe nochmal aufbereitet und im Blatt "Stahl 1" nochmal versucht zu verdeutlichen, worum es mir geht. Sie ist leider zu groß für einen upload hier, deshalb der externe Link.
Ich danke schon Mal jedem, der sich damit befasst und Zeit und Mühe investiert!
Hier der Link
https://www.transfernow.net/de/dltransfer?utm_source=20220310YkZw4TFs
Viele Grüße
Steve

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige