1.3k Aufrufe
Gefragt in Tabellenkalkulation von
Guten Tag zusammen,

habe ein Blatt "Artikel"
und ein Blatt "LI" ----( ist "Lieferschein" )

Im Blatt "Artikel" - Spalte H2 bis H3000 werden Fertigungsnummern eingetragen. (diese Nummern kommen nicht doppelt vor und werden immer nach einem neuem Eintrag sortiert)

Im Blatt "LI" können bis 10 Positionen von diesen Fertigungsnummern in unterschiedlicher Reihenfolge eingetragen werden. (in C15;C17;C19;C21;C23;C25;C27;C29;C31;C33)

Nun meine Frage: Ich möchte wenn der "LI" gedruckt ist das es
im Blatt "Artikel" in Spalte H2:H3000 diese Fertigungsnummer sucht und diese löscht.

P.S: Da ich denke dies ist nur über ein Makro möglich bitte Angaben wie ich das einfügen muss))

Herzlichen Dank

Gruss
Rudolf

6 Antworten

0 Punkte
Beantwortet von
Guten Tag zusammen,

SORRY - dies ist die Korrigierte Anfrage -ich muss das auf Blatt "RE"- (Rechnung) beziehen.

habe ein Blatt "Artikel"
und ein Blatt "RE" ----( ist "Rechnung" )

Im Blatt "Artikel" - Spalte H2 bis H3000 werden Fertigungsnummern eingetragen. (diese Nummern kommen nicht doppelt vor und werden immer nach einem neuem Eintrag sortiert)

Im Blatt "RE" können bis 10 Positionen von diesen Fertigungsnummern in unterschiedlicher Reihenfolge eingetragen werden. (inZellen: C16;C18;C20;C22;C24;C26;C28;C30;C32;C34)

Nun meine Frage: Ich möchte wenn die "RE" gedruckt ist das es
im Blatt "Artikel" in Spalte H2:H3000 diese Fertigungsnummer/n sucht und diese löscht.

P.S: Da ich denke dies ist nur über ein Makro möglich bitte Angaben wie ich das einfügen muss))

Herzlichen Dank

Gruss
Rudolf
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo Rudolf,

das folgende Makro musst du in ein Standard Modul deiner Arbeitsmappe kopieren:

Sub Nummern_loeschen()

Dim arrNummern As Variant
Dim arrSuch(9) As Variant
Dim lngZaehler As Long
Dim lnggeloescht As Long
Dim j As Long
Dim i As Long

'Suchnummern in Array einlesen
For i = 0 To 9
If IsEmpty(ThisWorkbook.Worksheets("RE").Cells(16 + 2 * i, 3)) = False Then
arrSuch(lngZaehler) = ThisWorkbook.Worksheets("RE").Cells(16 + 2 * i, 3)
lngZaehler = lngZaehler + 1
End If
Next i

'Suche
For i = LBound(arrSuch) To lngZaehler - 1

'Alle Rechnungsnummern in Array einlesen
With ThisWorkbook.Worksheets("Artikel")
arrNummern = .Range(.Cells(2, 8), .Cells(.Cells(Rows.Count, 8).End(xlUp).Row, 8))
End With

'Array mit Nummern durchlaufen
For j = LBound(arrNummern) To UBound(arrNummern)
If arrSuch(i) = arrNummern(j, 1) Then
ThisWorkbook.Worksheets("Artikel").Cells(j + 1, 1).EntireRow.Delete 'Zeile mit gefundener Nummer löschen
lnggeloescht = lnggeloescht + 1 'Zähler für gelöschte Datensätze
Exit For 'diese Schleife verlassen
End If
Next j

Next i

'Abschlussmeldung
MsgBox "Es wurden " & lnggeloescht & " Rechnungsnummern gelöscht"

End Sub


Das Makro löscht die ganze Zeile, wenn eine Übereinstimmung gefunden wurde. Zum Abschluss des Makros erhälst du eine Mitteilung, wieviel Datensätze (Zeilen) gelöscht wurden.

Dieses Makro musst du nach dem Drucken mit Hand starten. Willst, du dass das Makro automatisch nach dem Drucken startet, so kopiere das folgende Makro in das VBA-Projekt deiner Arbeitsmappe:

Private Sub Workbook_BeforePrint(Cancel As Boolean)

'Makro zum Löschen der Nummern nur dann aufrufen, wenn Tabellenblatt RE gedruckt wird
If ActiveSheet.Name = "RE" Then
'nach 10 Sekunden wird das Makro zum Löschen der Nummern aufgerufen
Application.OnTime Now + TimeValue("00:00:10"), "Nummern_loeschen"
End If

End Sub


Damit wird das Makro 10 Sekunden nach Aufrufen des Druckbefehls ausgeführt.

Die Arbeitsmappe musst du als xlsm-Datei abspeichern. Beachte bitte auch, dass ggf. die Ausführung von Makros zugelassen werden muss (siehe obige Links).

Probiere das Makro aber erst einmal in einer Testdatei aus.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O. ,

Danke für deine Hilfe.

Ich habe das Makro noch nicht eingefügt da ich noch 1ne Änderung dazu brauche.

Du schreibst: --- Das Makro löscht die ganze Zeile, ------
das kann ich so leider nicht nützen.

Ich möchte wenn die "RE" gedruckt ist das es
im Blatt "Artikel" in Spalte H2:H3000 [u]diese Fertigungsnummer/n sucht und diese löscht.[/u]

Erklärung dazu: Die Artikelnummer; Artikel;Bestellnummer ect. in den nachfolgenden Spalten/ Zeilen müssen erhalten bleiben da diese wiederkehrenden Arbeiten sind und dann ---- mit einer neuen Fertigungsnummer ---- wieder gebraucht oder eingesetzt werden.
Könntest du mir das noch bitte anpassen.

----------------------
Du schreibst:
Die Arbeitsmappe musst du als xlsm-Datei abspeichern.
Gehe ich auf : "Speichern unter:" in den "Dateityp" finde ich keine xlsm, oder ist das dann "Excel-Arbeitsmappe mit Makros" ??

Freue mich auf deine Rückantwort- Danke

Gruss
Rudolf
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo Rudolf,

wenn nur die gefundene Nummer in Spalte H gelöscht werden soll, dann ersetze die Zeile
ThisWorkbook.Worksheets("Artikel").Cells(j + 1, 1).EntireRow.Delete 'Zeile mit gefundener Nummer löschen

durch
ThisWorkbook.Worksheets("Artikel").Cells(j + 1, 8).ClearContents 'Nummer in Spalte wird gelöscht

Da du nicht deine Excel-Version angegeben hast, bin ich mal davon ausgegangen, dass du Excel 2007 oder neuer hast. Da ist die Erweiterung dann .xlsm. Wähle beim Speichern-unter bei Dateityp "Excel-Arbeitsmappe mit Makros" aus.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.

vielen vielen Dank für Deine Mühe - hat alles einwandfrei geklappt.
Der erste Durchlauf und Test ist korrekt.
Auch Klasse die Idee das Makro per Hand auszulösen- das passt perfekt.

Danke für die gute Beschreibung zum Einfügen.

Eine gute Zeit und

Gruß
Rudolf
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo Rudolf,

gern geschehen und Danke für die Rückmeldung.

Gruß

M.O.
...