Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1796to1800
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
Kopieren und Einfügen
09.12.2020 13:36:48
Florian
Moin zusammen,
ich brauche dringend eure Hilfe. Habe offensichtlich einen Denkfehler.
Habe die betroffene Tabelle eingefügt. Will vom Tabellenblatt Tasker via Button ins Tabellenblatt Tasker Archive archivieren. Allerdings beginnt die Ausgabe nicht bei A5 wo sie beginnen soll. Testet gerne mal selbst, zum Verständnis. Dann wird schnell klar was ich meine.
https://www.herber.de/bbs/user/142182.xlsm
Der Code lautet wie folgt:
Sub Copy_Click() ' Funktion Kopieren und Einügen
Application.ScreenUpdating = False
Dim rueck As Worksheet
Dim rng As Range
If vbYes = MsgBox("Are you sure to file these data?", vbDefaultButton1 + vbYesNo +  _
vbInformation, "Attention!") Then
Set rueck = ActiveSheet
With rueck.Shapes(Application.Caller)
Set rng = Range(.TopLeftCell.Offset(-1).Row & ":" & .TopLeftCell.Offset(11).Row).Rows
End With
With Sheets("Tasker Archive")
rng.Copy Destination:=.Range("A" & .Cells.SpecialCells(xlLastCell).Row + 1)
End With
Application.CutCopyMode = False
rng.Resize(1).ClearContents
rng.Resize(10).Offset(3).ClearContents
End If
Set rng = Nothing
Set rueck = Nothing
Application.ScreenUpdating = True
End Sub

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopieren und Einfügen
09.12.2020 14:19:13
Werner
Hallo,
das ist deine verbundenen Zellen im Zielblatt geschuldet.
Sub Copy_Click() ' Funktion Kopieren und Einügen
Dim rng As Range, loLetzteZiel As Long
Application.ScreenUpdating = False
If MsgBox("Are you sure to file these data?", vbDefaultButton1 + vbYesNo + _
vbInformation, "Attention!") = vbYes Then
With ActiveSheet.Shapes(Application.Caller)
Set rng = Range(.TopLeftCell.Offset(-1).Row & ":" & .TopLeftCell.Offset(11).Row).Rows
End With
With Worksheets("Tasker Archive")
loLetzteZiel = .Cells(.Rows.Count, "A").End(xlUp).Offset(1).Row
If loLetzteZiel = 3 Then loLetzteZiel = 5
rng.Copy Destination:=.Range("A" & loLetzteZiel)
End With
rng.Resize(1).ClearContents
rng.Resize(10).Offset(3).ClearContents
End If
Application.CutCopyMode = False
Set rng = Nothing
End Sub
Gruß Werner
Anzeige
AW: Kopieren und Einfügen
09.12.2020 14:33:27
Florian
Vielen Dank Werner für die schnelle Antwort. Ja das macht natürlich schon mehr Sinn so. Allerdings überschreibt er mir nun zum Teil den zuvor archivierten Bereich. Ab Zeile 4 wird die Tabelle ienfach überschrieben.
wie bekomme ich das nun gelöst?
AW: Kopieren und Einfügen
09.12.2020 15:01:41
Edmund
Hallo Florian
Das funktioniert nicht, weil jetzt die letzte Zeile mit Inhalt gesucht wird.
Du möchtest aber, dass am Ende des ganzen Blocks angehängt wird, unabhängig davon, ob davor noch was drinsteht oder nicht.
Ich hab Werners Code nochmals etwas angepasst.
So sollte das jetzt funktionieren
Sub Copy_Click() ' Funktion Kopieren und Einügen
Dim rng As Range, loLetzteZiel As Long
Application.ScreenUpdating = False
If MsgBox("Are you sure to file these data?", vbDefaultButton1 + vbYesNo + _
vbInformation, "Attention!") = vbYes Then
With ActiveSheet.Shapes(Application.Caller)
Set rng = Range(.TopLeftCell.Offset(-1).Row & ":" & .TopLeftCell.Offset(11).Row).Rows
End With
With Worksheets("Tasker Archive")
loLetzteZiel = .UsedRange.Row + .UsedRange.Rows.Count
If loLetzteZiel = 3 Then loLetzteZiel = 5
rng.Copy Destination:=.Range("A" & loLetzteZiel)
End With
rng.Resize(1).ClearContents
rng.Resize(10).Offset(3).ClearContents
End If
Application.CutCopyMode = False
Set rng = Nothing
End Sub

Anzeige
AW: Kopieren und Einfügen
09.12.2020 15:06:00
Werner
Hallo,
ist ja logsich.
Du ermittelst im Zielblatt die letzte belegte Zelle in Spalte A. Und wenn in deiner ursprünglichen Liste nur eine Zeile mit Daten befüllt war, dann wird beim nächsten Vorgang der kopierte Bereich unter dieser befüllten Zelle eingefügt. Und das ist dann halt nun mal nicht dein gewünschtes Ende.
Umgehen kannst du das z.B. indem du dafür sorgst, dass in deiner Ursprungstabelle die Zelle A17 immer befüllt ist. Dann passt auch die Ermittlung der letzten belegten Zelle im Zielblatt.
Hier im Code wird jetzt nach dem Einfügen geprüft, ob die letzte Tabellenzelle in Spalte A leer ist oder nicht.
Ist sie nicht leer, dann wird nichts gemacht.
Ist sie leer, dann wird dort ein x eingetragen und die Schriftfarbe auf weiß gesetzt, daß man das nicht sieht.
Auf alle Fälle ist damit sichergestellt, dass die letzte Zelle in Spalte A immer einen Wert hat. Dann passt auch die Ermittlung für den Einfügevorgang.
Sub Copy_Click() ' Funktion Kopieren und Einügen
Dim rng As Range, loLetzteZiel As Long
Application.ScreenUpdating = False
If MsgBox("Are you sure to file these data?", vbDefaultButton1 + vbYesNo + _
vbInformation, "Attention!") = vbYes Then
With ActiveSheet.Shapes(Application.Caller)
Set rng = Range(.TopLeftCell.Offset(-1).Row & ":" & .TopLeftCell.Offset(11).Row).Rows
End With
With Worksheets("Tasker Archive")
loLetzteZiel = .Cells(.Rows.Count, "A").End(xlUp).Offset(1).Row
If loLetzteZiel = 3 Then loLetzteZiel = 5
rng.Copy Destination:=.Range("A" & loLetzteZiel)
If .Cells(loLetzteZiel, "A").Offset(12) = "" Then
.Cells(loLetzteZiel, "A").Offset(12) = "x"
.Cells(loLetzteZiel, "A").Offset(12).Font.Color = vbWhite
End If
End With
rng.Resize(1).ClearContents
rng.Resize(10).Offset(3).ClearContents
End If
Application.CutCopyMode = False
Set rng = Nothing
End Sub
Gruß Werner
Anzeige
AW: Kopieren und Einfügen
09.12.2020 15:50:14
Florian
Das funktioniert hervorragend. Eben weil ich auch die Gruppierung beibehalten kann nach der Archivierung. Vielen DANK!
Aber ich Frage habe ich noch. Ich möchte nun die archievierten Einträge aus dem Tasker Archive auch seperat über einen button löschen können. Wie kann ich die Zeilen variabel ansprechen, um das Macro für mehrere Buttons nutzen zu können? Hoffe du verstehst was ich meine?
Ich möchte den archivierten Beitrag A5:I17 löschen
Meine Idee ist die Zeilen 5:17 über einen button zu löschen.
Ich möchte aber das die Funktion automatisch auf andere zellen angepasst wird,
wenn ich zb einen Button für den archivierten Beitrag A96:A108 erstelle um diesen zu löschen und das Makro zuweise.
Anzeige
AW: Kopieren und Einfügen
09.12.2020 16:07:05
Werner
Hallo,
für jeden Datensatz ein eingenes "Knopfchen" ist doch Käse.
Da würde ich das Doppelklick-Ereignis nehmen.
Den Code ins Codemodul vom Blatt "Tasker Archive"
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 1 Then
If Target.Cells(1, 1) = "Storyboard" Then
Cancel = True
If MsgBox("Are you sure to delete these data?", vbDefaultButton1 + vbYesNo + _
vbInformation, "Attention!") = vbYes Then
Target.Offset(-1).Resize(13).EntireRow.Delete
End If
End If
End If
End Sub
Doppelklick in Spalte A auf die Zelle mit dem Eintrag Storyboard löscht den entsprechenden Datensatz.
Gruß Werner
Anzeige
AW: Kopieren und Einfügen
10.12.2020 16:07:19
Florian
Vielen Dank für diese Alternative, warum ich nicht selbst auf die Doppelklick Idee gekommen bin. Bin selbst auch kein Fan von zich Buttons.
Aus diesem Grund habe ich dazu direkt eine Frage, kann ich die Buttons aus dem Blatt Tasker auch durch Doppelklick ersetzen zum archivieren?
Der derzeit genutzte code sieht so aus:
Sub Copy_Click()
Dim rng As Range, last As Long
Application.ScreenUpdating = False
If vbYes = MsgBox("Are you sure to file these data?", vbDefaultButton1 + vbYesNo +  _
vbInformation, "Attention!") Then
With ActiveSheet.Shapes(Application.Caller)
Set rng = Range(.TopLeftCell.Offset(-1).Row & ":" & .TopLeftCell.Offset(11).Row).Rows
End With
With Worksheets("Tasker Archive")
last = .Cells(.Rows.Count, "A").End(xlUp).Offset(1).Row
If last = 3 Then last = 5
rng.Copy Destination:=.Range("A" & last)
If .Cells(last, "A").Offset(12) = "" Then
.Cells(last, "A").Offset(12) = "x"
.Cells(last, "A").Offset(12).Font.Color = vbWhite
End If
End With
rng.Resize(1).ClearContents
rng.Resize(10).Offset(3).ClearContents
End If
Application.CutCopyMode = False
Set rng = Nothing
Application.ScreenUpdating = True
End Sub
Außerdem hätte ich gern noch das im Blatt Tasker in den Zellen e17, e30, etc jeweils das sktuelle datum eingetragen wird wenn in dem entsprechenden Zellen Tasker(a5,a18, etc) eine Eintragung gemacht wurde.
Anzeige
AW: Kopieren und Einfügen
11.12.2020 00:50:01
Werner
Hallo,
beide Codes ins Codemodul vom Tabellenblatt Tasker
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim loLetzteZiel As Long
Application.ScreenUpdating = False
If Target.Cells(1, 1).Address(0, 0) = "A6" Then
Cancel = True
If MsgBox("Are you sure to file these data?", vbDefaultButton1 + vbYesNo + _
vbInformation, "Attention!") = vbYes Then
Target.Offset(-1).Resize(13, 9).Copy
With Worksheets("Tasker Archive")
loLetzteZiel = .Cells(.Rows.Count, "A").End(xlUp).Offset(1).Row
If loLetzteZiel = 3 Then loLetzteZiel = 5
.Cells(loLetzteZiel, "A").PasteSpecial Paste:=xlPasteAll
If .Cells(loLetzteZiel, "A").Offset(12) = "" Then
.Cells(loLetzteZiel, "A").Offset(12) = "x"
.Cells(loLetzteZiel, "A").Offset(12).Font.Color = vbWhite
End If
End With
Target.Offset(2).Resize(10, 9).ClearContents
End If
End If
Application.CutCopyMode = False
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
If Target.Row > 4 And Target.Count = 1 Then
If Target.Offset(1).Cells(1, 1) = "Storyboard" Then
Target.Offset(12, 4) = IIf(Target  "", Target, "")
End If
End If
End If
End Sub
Gruß Werner
Anzeige
Korrektur
11.12.2020 01:02:50
Werner
Hallo,
falsch verstanden, du willst ja das aktuelle Datum.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
If Target.Row > 4 And Target.Count = 1 Then
If Target.Offset(1).Cells(1, 1) = "Storyboard" Then
Target.Offset(12, 4) = IIf(Target  "", Date, "")
End If
End If
End If
End Sub
Gruß Werner
AW: Korrektur
11.12.2020 12:42:20
Florian
Hallo Werner,
besten Dank der Doppelklick funktioniert einwandfrei!
Allerdings funktioniert die Datumseintragung noch nicht, wirft mir immer einen Fehler aus: Bibliothek kann nicht gefunden werden.
Wenn Bei dem Feld über Storyboard eine Eintragung gemacht wir (irgendwas), dann soll in e17 (variabel angesteuert) das heutige Datum erscheinen.
Gruß Florian
Anzeige
AW: Korrektur
11.12.2020 13:05:45
Werner
Hallo,
und in welcher Codezeile denn?
Bei mir kommt da nämlich kein Fehler. Test mit der Datei.
Der Code für das Doppelklick-Event im Blatt "Tasker" war noch falsch. Da war der Doppelklick auf Zelle A6 beschränkt. Ich habe aber gesehen, dass du da noch ausgeblendete "Tabellen" hattest. Hab den Code geändert.
https://www.herber.de/bbs/user/142255.xlsm
Gruß Werner
AW: Korrektur
11.12.2020 13:21:30
Florian
Danke!
Habe den Code 1.1 copy&paste, aber dennoch Fehler.
Es wird mir das Target hinter dem IIF markiert.
Gruß Werner
AW: Korrektur
11.12.2020 13:42:18
Werner
Hallo,
das interessiert mich zunächst mal nicht. Was ist mit der hochgeladenen Datei? Geht es da oder nicht?
Gruß Werner
Anzeige
AW: Korrektur
11.12.2020 14:28:06
Florian
Ja in der hochgeladenen Datei funktioniert es.
AW: Korrektur
11.12.2020 14:29:11
Werner
Hallo,
na dann wird es wohl an deiner anderen Datei liegen und die habe ich nicht. Hellsehen kann ich leider noch nicht.
Gruß Werner
AW: Korrektur
14.12.2020 16:35:39
Florian
Hallo,
habe es nun zum laufen bekommen. Merkwürdigerweise klappt es jetzt an Excel 2003. Also vielen Dank dafür.
Nun möchte ich jedoch noch einen Blattschutz einrichten. Einen der mir alle gesperrten Zellen schützt. Ich möchte aber weiterhin meine Gruppierung sowie meinen Doppelklick Makro nutzen können. Wie kann ich das umsetzen?
Bislang habe ich einfach die Zelle Storyboard entsperrt, wodurch aber der Zellinhalt gelöscht werden könnte von anderen Nutzern. Das möchte ich natürlich verhindern.
Lg
Florian
AW: Korrektur
15.12.2020 05:51:59
Werner
Hallo,
diesen Code ins Codemodul von "DieseArbeitsmappe" kopieren.
Sub Workbook_Open()
Worksheets("Tasker").Protect userinterfaceonly:=True, Password:="Passwort"
Worksheets("Tasker").EnableOutlining = True
Worksheets("Tasker Archive").Protect userinterfaceonly:=True, Password:="Passwort"
End Sub
Kennwort anpassen.
Datei speichern und schließen.
Beim nächsten öffnen der Datei kannst du die Gliederung benutzen und das Doppelklick funktioniert auch, trotz Blattschutz.
Gruß Werner
AW: Korrektur
15.12.2020 09:52:15
Florian
Hallo Werner,
funktioniert erstmal grundsätzlich. Jedoch möchte ich auch auf die Zelle Storyboard den Schreibschutz aktivieren und dennoch die Funktion ausführen können. Letztlich möchte ich verhindern das jemand das Storyboard löschen und somit die gesamte Funktion beeinträchtigen kann.
Geht das?
Lg Florian
AW: Korrektur
15.12.2020 10:23:38
Werner
Hallo,
dann mach doch mal den Blattschutz raus und setz ihn von Hand. Dabei bei "gesperrte Zellen auswählen" den Haken rein machen.
Gruß Werner
AW: Korrektur
15.12.2020 10:41:04
Florian
Hab ich ausprobiert, dann funktioniert die Klick Funktion nicht mehr.
AW: Korrektur
15.12.2020 10:45:30
Werner
Hallo,
das ist Quatsch.
Du sollst den Haken bei "gesperrte Zellen auswählen" rein machen und nicht raus, dann funktioniert auch das Doppelklick-Event trotz Blattschutz.
Gruß Werner
AW: Korrektur
15.12.2020 10:58:38
Florian
Du hast mal wieder Recht! Jetzt hab ich es verstanden und hinbekommen! Vielen vielen Dank!!!
Gerne u. Danke für die Rückmeldung. o.w.T.
15.12.2020 11:17:10
Werner

315 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige