Zeilen in variable Tabellenblätter kopieren
#1
Hallo Ihr Lieben,

habe eine Arbeitsmappe mit mehreren Tabellenblättern. Alle Blätter haben den gleichen Aufbau. (Es ist eine Artikelliste.)
Zeile 1 uns 2 ist der Tabellenkopf. Danach unterschiedliche Anzahl an befüllten Zeilen.
In Spalte G steht ein Datum.

Die Reiter sind benannt mit: 01.01.2016, 01.02.2016, 01.03.2016... usw. und ein Reiter heißt Sperrliste.

Wenn ich Spalte I in einer der Tabellen ein S bei einem Artikel eingetragen wird, wird über einen Button und Makro diese komplette Zeile mit dem Artikel in die Sperrliste verschoben.
Das habe ich schon hin bekommen und es klappt super.

Mein Problem ist nun folgendes. Wenn ich in der Sperrliste in der Spalte I bei einem Artikel das S wieder herausnehme, möchte ich durch betätigen
eines Buttons ein Makro auslösen, welches dann die Sperrliste Zeile für Zeile durchläuft und die Artikel, wo kein S mehr in Spalte I steht,
in die ursprünglichen Tabellen ans Ende zurück kopiert, d. h. wenn ich Spalte G ein Datum steht z.B. 15.03.2016 soll der Artikel in das Tabellenblatt
01.03.2016 zurück kopiert werden, der Artikel mit Datum 28.02.16 in das Blatt 01.02.2016 usw.

Irgendwie habe ich noch keinen Plan, wie ich das anstellen soll.

LG.

Peggy


Angehängte Dateien
.xlsm   offene Bestellungen neu4.xlsm (Größe: 376,16 KB / Downloads: 9)
Top
#2
Hallo!
Zitat:Das habe ich schon hin bekommen und es klappt super.
Der ganze Aufbau der Mappe erscheint mir fragwürdig.
Warum nicht alles in ein Blatt mit der "Sperrspalte"?
Dann ist es ein Klacks, die Sperrung wegzufiltern und/oder eine Datenüberprüfung laufen zu lassen.
Da die Datei bereits vorhanden ist, solltest Du diese auch hochladen.

Bevor Du meckerst: eine Datei kann man anonymisieren, wichtig ist der Aufbau.

Auswertungen großer Datenmengen sollte man dann per Pivot-Tabelle vornehmen.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#3
Ah, ich sehe gerade!
Unsere Peggymaus hat drei Themen erstellt und bereits drei Beiträge abgesendet Exclamation 
Habe mir den Verlauf mal angesehen.
Trotz teilweise arbeitsintensiver Antworten hält sie es nicht für notwendig, auch mal zu antworten.
Ich glaube, ich werde es ab sofort bei ihr auch so halten, sollte nicht zeitnah eine Antwort kommen.

Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#4
Hallo Ralf.

Die Datei wurde hochgeladen. Der Aufbau wird leider genau so gewünscht. Was das Antworten angeht werde ich mich natürlich bessern.

LG.

Peggy
Top
#5
Hallo Ihr Lieben.


Habe mir überlegt, ob ich per VBA das Datum aus der Spalte G in der Sperrliste so auslesen kann, dass der Monat und das Jahr herauskommt. Dann mit der 01 davor verketten, dann hätte ich den richtigen Tabellennamen.

Aber wie ich diese Verkettung als variablen Bestandteil in mein Makro bekomme... keine Ahnung.

Hat irgend jemand vielleicht eine Idee dazu?

LG.

Peggy
Top
#6
Hallo noch mal,

habe gerade eine Möglichkeit gefunden, über folgende Formel:

=TEIL(ZELLE("Dateiname";$A$1);FINDEN("]";ZELLE("Dateiname";$A$1))+1;31)

und dann Umwandlung in einen festen Wert dem Artikel den Quelltabellennamen mit zu geben.

Aber wie kann ich diesen dann wieder einbauen zum Rückübertragen?

Den folgenden Code habe ich im Netz gefunden und denke dass dieser mein Ziel erfüllen kann.

Jedoch weiß ich nicht, wie ich den Tabellennamen dort einfügen kann.

Sub KopiereBereich()
Dim Quelltab As Worksheet
Dim Zieltab As Worksheet
Dim Zelle As Range
Dim Zaehler As Long
Zaehler = 1
Bereich = "A1:A10"
Set Quelltab = ActiveWorkbook.Worksheets("Tabelle1")
Set Zieltab = ActiveWorkbook.Worksheets("Tabelle2")
For Each Zelle In Quelltab.Range("A1:A10")
Zieltab.Cells(Zaehler, 1) = Zelle
Zaehler = Zaehler + 1
Next Zelle
End Sub

Hoffe es kann mir jemand helfen.

LG

Peggy
Top
#7
Hallo Peggy,

unten den Code anschauen und verstehen und bei Dir zu zurück kopieren verwenden:


Code:
 Dim i As Long
 Dim letzteZeile
 Dim strgTab As String
 
 For i = 2 To 100
   If Cells(i, 9) = "S" Then   'Spalte i nach "S" prüfen
     strgTab = DateSerial(Year(Cells(i, 7)), Month(Cells(i, 7)), 1) 'wenn ein "S" dann aus dem Datum der Spalte G der Zeile das entsprechende Blatt (Zieltabelle) ermitteln
     With Sheets(strgTab)
       letzteZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1   'erte freie Zeile in Spalte 1 der Zieltabelle ermitteln
       .Range(.Cells(letzteZeile, 1), .Cells(letzteZeile, 15)) = Range(Cells(i, 1), Cells(i, 15)).Value 'Den Inhalt des Bereichs A:O in den in den Bereich A:O der Zieltabelle schreiben
     End With
   End If
 Next i
Gruß Atilla
Top
#8
Dankschön. Probiere es gleich aus.

LG.

Peggy
Top
#9
So habe es getestet,

leider kommt die Meldung End ohne End if.
Wenn ich nach End with End if eingebe, kommt dann die Fehlermehlung For ohne Next.

LG.

Peggy
Top
#10
Hallo Attila,

habe next auch noch eingefügt und alles angepasst jetzt funktioniert es. Super. Genau so wollte ich es haben.

Wie kann ich folgende Zeilen umbauen, dass immer die ganzen Zeilen und nicht nur die Werte sondern auch Formatierungen und Co. mit kopiert werden?

Code:
For i = 3 To 100
  If Cells(i, 16) = "1" Then   'Spalte p nach "1" prüfen
    strgTab = DateSerial(Year(Cells(i, 7)), Month(Cells(i, 7)), 1) 'wenn ein "S" dann aus dem Datum der Spalte G der Zeile das entsprechende Blatt (Zieltabelle) ermitteln
    With Sheets(strgTab)
       letzteZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1   'erte freie Zeile in Spalte 1 der Zieltabelle ermitteln
      .Range(.Cells(letzteZeile, 1), .Cells(letzteZeile, 15)) = Range(Cells(i, 1), Cells(i, 15)).Value 'Den Inhalt des Bereichs A:O in den in den Bereich A:O der Zieltabelle schreiben
    End With
    End If
    Next

Danke schon mal für Deine Hilfe.

LG.

Peggy
Top


Gehe zu:


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