Zeilen per Makro verwalten

Hallo,
ich habe folgendes Problem.
Ich habe drei Tabellenblätter: „Vorstufe“, „Hauptansicht“ „Nacharbeit“
alle drei Blätter haben die selbe Formatierung. Sagen wir nun ich habe im Tabellenblatt „Vorstufe“ nun eine Zeile deren status erledigt ist, so dass es in die Hauptansicht wechseln könnte, so möchte ich in der Tabelle Vorstufe in eine Zelle nehmen wir H12 „erledigt“ eintragen und die Zeile wird automatisch in dieser Tabelle ausgeschnitten und die Tabelle Hauptstufe eingetragen.

Momentan habe ich leider erst geschafft ein Befehlsfeld einzutragen, dass bei betätigung die markierte Zelle ausschneidet und in der zweiten tabelle einträgt, dass ist aber noch nicht ganz das was ich will. Ich möchte, dass das Makro im hintergrund läuft und automatisch startet sobald ich „erledigt“ in beispielsweise der spalte h in einer zelle eintrage.

Kann mir jemand weiterhelfen?
Vielen Dank

So ich habe jetzt mal ein bisschen gebastelt:
Private Sub worksheet_change(ByVal target As Range)
If Range(„A24“) = 0 Then
Call test
End If
End Sub

Sub test()
Dim loletzte As Long
With Worksheets(„europe“)
loletzte = IIf(IsEmpty(.Range(„A65536“)), .Range(„A65536“).End(xlUp).Row + 1, 65536)
Selection.cut Destination:=.Cells(loletzte, 1)
End With
End Sub

läuft aber nicht :frowning:((((

Hi Steffi,

ich habe die 65536 durch Rows.count ersetzt wegen XL2007.
Code prüft Spalte H in dem Blatt in dessen Dokumentmodul , z.B. Tabelle1, derCode steht.

Private Sub Worksheet\_Change(ByVal Target As Range)
If Target.Column 8 Then Exit Sub
If Target.Cells.Count \> 1 Then Exit Sub
Dim loletzte As Long
If Target.Value = "erledigt" Then
 With Worksheets("Tabelle2") ' Namen anpassen
 loletzte = IIf(IsEmpty(.Range("A" & .Rows.Count)), .Range("A" & .Rows.Count).End(xlUp).Row + 1, .Rows.Count)
 Target.EntireRow.Cut Destination:=.Cells(loletzte, 1)
 End With
End If
End Sub

Gruß
Reinhard

Hallo Reinhard,

vielen Dank erstmal.
Ich hab das jetzt mal ausprobiert. Leider habe ich auf diesem rechner noch kein XL2007 sondern noch 2000.
ich habe deshalb die rows.count wieder mit durch 65536 ersetzt. Wenn das so richtig war ?-)
hier also das makro nochmal

Private Sub worksheet_change(ByVal target As Range)
If target.Columns 8 Then Exit Sub
If target.Cells.Count > 1 Then Exit Sub
Dim loletzte As Long
If target.Value = „0“ Then
With Worksheets(„tabelle 2“)
loletzte = IIf(IsEmpty(.Range(„A65536“)), .Range(„A65536“).End(xlUp).Row + 1, 65536)
target.EntireRow.Cut Destination:=.Cells(loletzte, 1)
End With
End If
End Sub

läuft aber nicht :frowning: ich hab das jetzt so verstanden, dass ich in Spalte h (also 8) „erledigt“ schreibe und dann die zeile eigentlich ausgeschnitten werden sollte und dann würde es in der tabelle 2 erscheinen?
dann mache ich bestimmt beim einfügen des makros etwas falsch? Ich habe mit der rechten maustaste auf das tabellenblatt „code anzeigen“ geöffnet und da das makro eingefügt. Wie gesagt ich habe 0erfahrung mit makros. Die „dinger“ die ich ausprobiert habe, haben hierüber funktioniert!

Steffi

Hallo Steffi,

Ich hab das jetzt mal ausprobiert. Leider habe ich auf diesem
rechner noch kein XL2007 sondern noch 2000.
ich habe deshalb die rows.count wieder mit durch 65536
ersetzt. Wenn das so richtig war ?-)

Ist schon okay, ich habe es mir halt für mich so angewöhnt gleich so zu schreiben damit es auch in XL2007 läuft falls ich das mal haben sollte.

Tut mir sehr leid wenn dich das irritiert hat:frowning:

Private Sub worksheet_change(ByVal target As Range)
If target.Columns 8 Then Exit Sub
If target.Cells.Count > 1 Then Exit Sub
Dim loletzte As Long
If target.Value = „0“ Then
With Worksheets(„tabelle 2“)
loletzte = IIf(IsEmpty(.Range(„A65536“)),
.Range(„A65536“).End(xlUp).Row + 1, 65536)
target.EntireRow.Cut Destination:=.Cells(loletzte, 1)
End With
End If
End Sub

läuft aber nicht :frowning:

Das ist schlecht, aber geht das auch genauer, was genau passiert bzw. passiert nicht?

ich hab das jetzt so verstanden, dass ich
in Spalte h (also 8) „erledigt“ schreibe und dann die zeile
eigentlich ausgeschnitten werden sollte und dann würde es in
der tabelle 2 erscheinen?

Richtig, mein Code macht das auch *denk*. In deinem prüfst du die geänderte Zelle=target auf
If target.Value = „0“ Then
Wenn ich dich richtig verstanden habe müßte es heißen:
If Target.Value = „erledigt“ Then

Ich sehe an deinem Code daß du ihn frei Hand geschrieben hast und nicht aus dem Editor kopiert hast. Mach das nicht, kommen nur zusätzliche Probleme mit der Schreibweise hinzu.

Excel ist es manchmal völlig wurscht ob etwas groß oder klein geschrieben ist, manchmal allerdings ist das ein Riesenunterschied.
tabelle 2 gibt es normalerweise nicht, es heißt
Tabelle2

dann mache ich bestimmt beim einfügen des makros etwas falsch?
Ich habe mit der rechten maustaste auf das tabellenblatt „code
anzeigen“ geöffnet und da das makro eingefügt. Wie gesagt ich
habe 0erfahrung mit makros. Die „dinger“ die ich ausprobiert
habe, haben hierüber funktioniert!

In Excel gibt es meist mehrere Wege etwas zu tun, ich „arbeite“ nur mit Alt+F11, aber dein Weg ist genauso okay. Wichtig ist, wenn du die Saplte H von Tabelle1 durch diesen Code überwachen willst ob jmd „erledigt“ hineinschreibt, daß der Code im Editor auch im Codemodul von Tabelle1 steht.

Und, ich käm nie auf den Gedanken
Private Sub worksheet_change(ByVal target As Range)
per Hand zu schreiben, ich doppelklicke im Editor auf z.B. Tabelle1, wähle in der Mitte worksheet aus und dann rechts Change, dann bastelt mir Vba
Private Sub Worksheet_Change(ByVal Target As Range)

Gruß
Reinhard

Hi

also ich habe das heute nochmal ausprobiert und irgendwie läuft es jetzt auch*hmmm* ich hab aber nichts dran geändert…egal hauptsache es läuft :wink:

vielen dank also

Jetzt habe ich nochmal ne frage
wenn ich diese zeilen nun nicht ausschneiden möchte sondern nur kopieren will, kann ich das cut durch „copy“ ersetzen?
habe das eben ausprobiert. Funktioniert zwar aber komischerweise erst dann wenn ich das kennzeichen wieder lösche. d.h. ich setze das kennzeichen „ok“ dann tut sich nichts, aus frust lösche ich „ok“ und siehe da schon ist die zeile kopiert!? *hä*
ist bei allen zeilen so…und dann stört mich noch dass er wenn ich zwei zeilen kennzeichne er nur eine in der anderen tabelle anzeigt. die vorgängerzeile wird überschrieben.

hat jemand einen rat?
Danke

so habe ich mir das mal zurecht gebastelt:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column 52 Then Exit Sub
If Target.Cells.Count > 1 Then Exit Sub
Dim loletzte As Long
If Target.Value = „won“ Then
With Worksheets(„won“)
If Target.Value = „lost“ Then
With Worksheets(„lost“)
loletzte = IIf(IsEmpty(.Range(„a65536“)), .Range(„a65536“).End(xlUp).Row + 1, 65536)
Target.EntireRow.Copy Destination:=.Cells(loletzte, 1)
End With
End If
End Sub

wie oben beschrieben läuft es aber fehlerhaft :frowning:

Hallo,
so müßte es doch klappen:

Option Explicit
'
Private Sub Worksheet\_SelectionChange(ByVal Target As Range)
If Target.Column 52 Then Exit Sub
If Target.Cells.Count \> 1 Then Exit Sub
Dim loletzte As Long
If Target.Value = "won" Or Target.Value = "lost" Then
 With Worksheets(Target.Value)
 loletzte = IIf(IsEmpty(.Range("a65536")), .Range("a65536").End(xlUp).Row + 1, 65536)
 Target.EntireRow.Copy Destination:=.Cells(loletzte, 1)
 End With
End If
End Sub

Gruß
Reinhard

Super! Klasse klappt alles!
vielen dank für die schnelle Hilfe:smile:

Super! Klasse klappt alles!
vielen dank für die schnelle Hilfe:smile:

Hallo Stracciatella,
es klappt alles? *sehr staun*
Weil mir fiel gerade auf daß es Worksheet_Change sein muß und nicht Worksheet_SelectionChange.
Aber bitte, wenns seltsamerweise auch so geht will ich nix gesagt haben, never touch a running system :smile:)

Gruß
Reinhard

Hm ich weiß nicht…ich kenn mich damit ja noch nicht so gut aus :wink: hauptsache es läuft :smiley:

allerdings…also irgendwie wenn ich jetzt „won“ in die Zeile schreibe, wollte ich ja das sie dann kopiert wird. wird sie auch aber erst wenn ich 2x Enter drücke. Nicht weiter tragisch nur wenn andere Benutzer die Datei nutzen, dann könnte es schwierig werden. warum ist das so? und wenn ich das „won“ wieder lösche, dann wird die Zeile nochmals kopiert. So dass sie dann doppelt in der anderen Tabelle steht ?-)

Ist nicht weiter tragisch weil das ja nur ne gewöhnungssache ist, aber ich finds irgendwie komisch. Gibts da noch eine Abhilfe?

allerdings…also irgendwie wenn ich jetzt „won“ in die Zeile
schreibe, wollte ich ja das sie dann kopiert wird. wird sie
auch aber erst wenn ich 2x Enter drücke. Nicht weiter tragisch
nur wenn andere Benutzer die Datei nutzen, dann könnte es
schwierig werden. warum ist das so? und wenn ich das „won“
wieder lösche, dann wird die Zeile nochmals kopiert. So dass
sie dann doppelt in der anderen Tabelle steht ?-)

Hi Stracciatella,
so kommen wir nicht weiter, bei dir geschehen in Vba Dinge die ich mir so nicht erklären kann.
Erstell mal bitte eine kleine Beispieldatei, wo das auftritt mit dem 2xEnter, oder mache eine Kopie deiner Orginaldatei, lösche da alles was uninteressant ist und anonymisier die Daten falls erforderlich.
Und bitte kein MegaByteMonster an Datei :smile:
Ohne viel Aufwand, anstatt Namen wie Müller, Meier, Schulze reicht auch a,b,c, desgleichen bei Zahlwerten usw.
Wichtig ist nur, daß die Makros drin sind und es so funktioniert mit dem 2xEnter wie du sagst.
Achja, Hochladen kannste das dann bei www.hostarea.de o.ä. und hier den Link posten.
Gruß
Reinhard