Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Zeile per Button in anderes Tabellenblatt verschieben
#1
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
Antworten Top
#2
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
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#3
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
Antworten Top
#4
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?
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#5
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
Antworten Top
#6
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
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#7
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
Antworten Top
#8
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
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#9
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste