Clever-Excel-Forum

Normale Version: Zeile per Button in anderes Tabellenblatt verschieben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi

ich habe eine Tabelle mit ca 400 Zeilen (Tendenz steigend). Diese sind jeweils von Spalte A bis Spalte T genutzt. In jede Zeile soll in Spalte U ein Button hinterlegt werden, der die jeweilige Zeile in der er sich befindet von Spalte A bis Spalte T in ein zweites Tabellenblatt verschiebt. Begonnen werden soll dabei in der zweiten Zeile des neuen Blattes, da die erste Zeile zum Filtern gebaucht wird. Jede weiter Zeile soll einfach unten in die nächste freie Zeile des zweiten Blattest verschoben werden. Es sollen alle Eigenschaften wie Formatierungen, Bedingte Formatierungen, Datenüberprüfungen oder Formeln mit übertragen werden. Nachdem jeder Button einmal geklickt wurde, sollte das erste Blatt bis auf die erste Zeile (auch hier sind Filter) leer sein.

Wenn möglich sollten im ersten Blatt die Formatierungen, Bedingte Formatierungen, Datenprüfungen und Formeln  erhalten bleiben und nur die Zellen geleert werden. Im ersten und zweiten Tabellenblatt soll ein Blattschutz mit Passwort aktiv sein. Dieser muss eventuell vorher deaktiviert und danach wieder aktiviert werden. 




Im zweiten Schritt sollen die Spalten A bis H aus dem zweiten Tabellenblatt wieder in das erste Tabellenblatt verschoben werden, wenn zwischen dem Datum in Spalte P (Format DD.MM.YYYY) und der Systemzeit 4 Jahre liegen. Dabei sollen nur die Jahre beachtet werden. Ist das Datum in Spalte P also der 23.12.2018 soll diese Zeile trotzdem am 01.01.2022 wieder in Tabellenblatt1 verschoben werden. Ideal wäre es wenn man die Zeitspanne mit Tag, Woche, Monat, und Jahr in 4 Zellen eines weiteren Tabellenblattes Abhängig vom Wert in Spalte A des zweiten Blattes deffinieren könnte. (Etwa "wenn der Wert in Spalte A = "OrtA" verschiebe die Zeile nach X Jahren") Zeilen bei denen der Wert in Spalte T "entfernt" lautet, sollten nichtmehr beachtet werden. 

Mein Ziel ist es in einem Tabellenblatt alle Zeilen zu sehen die in einem bestimmten Tournus geprüft werden müssen. In den Spalten I bis T die Ergebnisse der Prüfung einzutragen und die ganze Zeile dann in einer weiteren Tabelle zu archivieren und nach Ablauf einer bestimmten Zeit wieder zu Prüfen. Die erste Tabelle soll also nur anzeigen was noch geprüft werden muss und die zweite Tabelle soll als Archiv mit den Jahren wachsen und jedes Prüfergebniss speichern. Es darf nichts überschrieben werden. 

Jetzt bedanke ich mich schonmal bei allen die bis hier hin gelesen haben :D und bin gespannt ob sich das mit Excel und VBA bewerkstelligen lässt.

Viele Grüße

Foley
Hallo,

mal ein Ansatz ohne die Buttons auslösbar mit einem Doppelclick in der Zeile
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   Dim lngC As Long
  
   With Worksheets("Tabelle2")
      lngC = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
      Cells(Target.Row, 1).Resize(, 20).Copy .Cells(lngC, 1)
   End With
   Cancel = True
End Sub
Hi Stefan

vielen Dank für deinen Ansatz. Ich nutze in diesem Tabellenblatt schon VBA mit Doppelklick um eine ungenutzte Zahl aus einem bestimmten Zahlenbereich zu vergeben. Das ganze kannst du unter meinem Beitrag "Nächste ungenutzte Zahl finden / doppelte Zahlen verhindern" sehen. Würde es einen Konflikt geben wenn ich deinen Ansatz verwenden würde? Da ja beides per Doppelklick ausgelöst wird.

Danke für die Hilfe und viele Grüße

Foley
Hallo,

(18.02.2018, 19:21)Foley schrieb: [ -> ]Ich nutze in diesem Tabellenblatt schon VBA mit Doppelklick um eine ungenutzte Zahl aus einem bestimmten Zahlenbereich zu vergeben. Das ganze kannst du unter meinem Beitrag "Nächste ungenutzte Zahl finden / doppelte Zahlen verhindern" sehen. Würde es einen Konflikt geben wenn ich deinen Ansatz verwenden würde?

Ohne deinen Beitrag zu sehen, mit großer Wahrscheinlichkeit ja, es kommt zu Konflikten. Wie wäre es mit dem Rechtsklick-Ereignis?
Hi Stefan,

den Beitrag solltest du unter diesem Link finden können:

http://www.clever-excel-forum.de/thread-...#pid110861

Ein Auslösen per Rechtsklick klingt auch Benutzerfreundlich. Das bereits benutze "Doppelklickevent" bezieht sich nur auf die Spalte A. Soweit ich das verstanden habe, sollte es sich auch mit einem weiteren Doppelklick nicht in die Quere kommen, wenn es nicht in der gleichen Spalte ausgelöst wird. Ist es möglich auch zu prüfen ob die Spalten A bis Q alle ausgefüllt wurden bevor die Zeile verschoben wird? Spalte L muss nur ausgefüllt sein wenn Spalte H einen bestimmten Wert erfüllt. Aber ich glaube da wird es dann zu komplex oder? 

Würde es helfen wenn ich den Code für das bereits benutzte "Doppelklickevent" mal hier einfüge?

Danke für deine Hilfe und viele Grüße

Foley
Hallo Foley,

den Code von Elex und meiner mal verbunden.

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   Dim n As Range
   Dim i As Long
   Dim lngC As Long
   'code von Elex
   If Target.Column = 1 Then
      With Sheets("Tabelle2").Range("A2", Sheets("Tabelle2").Range("A2").End(xlDown))
         Set n = .Find(Target.Value, LookIn:=xlValues)
         If Not n Is Nothing Then
            If Target.Cells.Offset(, 4) = "" Then
               If Target.Cells.Offset(, 7) <> "" Then
                  i = Target.Cells.Offset(, 7).Value
                  Target.Cells.Offset(, 4) = Sheets("Tabelle2").Cells(1 + i, 2)
               Else
                  If MsgBox("Soll " & Target.Address & " " & Target.Value & _
                     " die Nr. " & n.Offset(, 1) & " zugewiesen werden?", _
                     vbYesNo Or vbQuestion, "Zuweisen") = vbYes Then
                     Target.Cells.Offset(, 4) = n.Offset(, 1)
                  End If
               End If
            End If
         Else
            MsgBox "Ort nicht gefunden."
         End If
      End With
      '  Cancel = True
   End If
   'Code von Steffl
   If Target.Column = 20 Then
      With Worksheets("Tabelle2")
         lngC = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
         Cells(Target.Row, 1).Resize(, 20).Copy .Cells(lngC, 1)
      End With
   End If
   Cancel = True

End Sub
Hi Stefan,

ich konnte deinen / euren Code gearde test. Es scheint beides wunderbar zusammen zu arbeiten. Es werden alle Werte und Formatierungen übernommen. Sehe ich das richtig, dass das Kopieren ausgelöst wird wenn man auf die Zelle in Spalte T (die 20ste Zelle von links) doppelklickt? Ist es möglich den "Auslöser" auf die 21ste Zelle (Spalte U) zu verlegen aber trotzdem nur die ersten 20 Zellen zu kopieren? Dann könnte ich mir in Spalte U einen Eintrag wie "Zum speichern hier  Doppelklicken" oder soetwas machen.

Eine Abfrage wie bei der Nummernvergabe, wäre auch toll. Dann weiß man auch das die Zeile kopiert wurde. Bzw. Die Zeile bleibt ja dann in der ersten Tabelle stehen. Wenn es möglich ist, würde ich die erste Tabelle gerne nutzen um eine Liste abzuarbeiten und die zweite Tabelle um die Ergebnisse zu archivieren. Dabei sollen dann wie es jetzt bereits ist alle Werte gespeichert werden. Nach ablauf einer bestimmten Zeit würde ich dann gerne die "fixen" Werte aus Spalte A bis H in die erste Tabelle zurück kopieren. Die Spalten I bis T sollen ohne Werte nur mit ihrer Formatierung und Datenüberprüfung zurück kopiert werden um dann wieder mit Prüfergebnissen gefüllt und zum Abschluss dem Archiv hinzugefügt zu werden.

Ich habe die Hoffnung das sich das alles in Excel bzw per VBA lösen lässt. Wie siehst du das?

Viele Grüße und vielen Dank für deine Hilfe

Foley
Hallo,

statt der Spalte T die Spalte U zu nehmen, ist ziemlich einfach. Ersetze diese

Code:
If Target.Column = 20 Then

Codezeile durch die

Code:
If Target.Column = 21 Then
Ah. Vielen Dank. Ich beginne zu verstehen :)
Leider kann ich selbst gar kein VBA. Ich hoffe, dass ich mit und mit mehr davon verstehe. 

Viele Grüße 

Foley