6.5k Aufrufe
Gefragt in Tabellenkalkulation von hoax Einsteiger_in (91 Punkte)
Hallo Forum,

ich habe für Excel eine Tabelle/Blatt, welche ich nachhaltig pflegen möchte.
In dem Blatt "Lagerliste" stehen in jeder Reihe Daten, ab A9 bis R9 und abwärts bis ca. 700.
Wenn ich nun in M9 o M... ein Datum eintrage, möchte ich, daß die jeweilige Zeile (in diesem Fall 9) in eine neues Blatt names "Legende" jeweils in die nächste freie Zeile kopiert wird.
Ich habe gelesen mit VBA wäre sowas möglich...

Grüße

Hajo

12 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Hajo,


Option Explicit

Private Sub Worksheet_change(ByVal Target As Range)
If Target.Column = 13 And IsDate(Target) And Target <> "" Then
With Worksheets("Legende")
Dim LoLetzte As Long
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 13)), _
.Cells(.Rows.Count, 13).End(xlUp).Row, .Rows.Count) + 1
Rows(Target.Row).Copy .Cells(LoLetzte, 1)
End With
End If
End Sub


Gruß Hajo
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Hajo,

anbei ein Beispiel

Gruss
Rainer
0 Punkte
Beantwortet von hoax Einsteiger_in (91 Punkte)
Vielen Dank ihr beiden,

nicht nur für das funktionierende Makro, auch für die wirklich schnelle Antwort. immerhin hab ich heute schon etwa 9 Stunden an der Lösung gebastelt, aber außer Laufzeitfehler xy ist nichts bei rumgesprungen.

Kann man nachdem die betreffende Zeile kopiert wurde, den Inhalt der Zellen J,K,M und N aus dem Blatt "Lagerliste" automatisch löschen, so das man es nicht mehr manuell machen muß?


Grüße

Hajo
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Hajo,

ungetestet

Option Explicit

Private Sub Worksheet_change(ByVal Target As Range)
If Target.Column = 13 And IsDate(Target) And Target <> "" Then
With Worksheets("Legende")
Dim LoLetzte As Long
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 13)), _
.Cells(.Rows.Count, 13).End(xlUp).Row, .Rows.Count) + 1
Rows(Target.Row).Copy .Cells(LoLetzte, 1)
Rows(Target.Row)..delete
End With
End If
End Sub


Gruß Hajo
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Hajo,

ein Punkt zu viel
Rows(Target.Row).delete

Gruß Hajo
0 Punkte
Beantwortet von saarbauer Profi (15.6k Punkte)
Hallo @ Hajo_Zi

ich glaube @Hoax will nur den Inhalt der Spalten J,K,M und N löschen und nicht die komplette Zeile

Gruß

Helmut
0 Punkte
Beantwortet von hoax Einsteiger_in (91 Punkte)
Hallo und vielen Dank,

genau so ist es, lediglich der Inhalt von J,K,N und M soll aus der zuvor kopierten Zeile in Lagerliste gelöscht werden und nicht die komplette Zeile.


Gruß

Hajo
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Hajo,

cells(Target.Row,10)=""
cells(Target.Row,11)=""
cells(Target.Row,13)=""
cells(Target.Row,14)=""

Gruß Hajo
0 Punkte
Beantwortet von hoax Einsteiger_in (91 Punkte)
Danke, funktioniert fabelhaft...

dummerweise enthält das Blatt noch weitere Makros, wenn ich nun das Makro refresh starte:
----------------------------------------------------------------------------------------------
Sub Refresh__neu()
'
' Refresh__neu Makro
'

'
Range("A5:R5").Select
Selection.ClearContents
Range("A6").Select
Application.Run "Werkzeuglager.xls!Suchen"
End Sub
----------------------------------------------------------------------------------------------

erscheint die Fehlermeldung:

Laufzeitfehler "13"
Typen unverträglich

Was bedeutet das?

Grüße
Hajo
0 Punkte
Beantwortet von saarbauer Profi (15.6k Punkte)
Hallo,

gehe mal das Makro mit Einzelschritten durch, dann zeigt er dir wo es Probleme gibt.

Ich habe es versucht und hatte Probleme nur in der Zeile

Application.Run "Werkzeuglager.xls!Suchen"


ist aber klar, da es die Datei bei mir nicht gibt.

Gruß

Helmut
...