Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Artikel in nächste freie Zeile der Bestellung

Artikel in nächste freie Zeile der Bestellung
08.04.2014 08:39:42
Micha
Guten Morgen,
vfielleicht könnte jemand mir bei folgendem Problem weiterhelfen? Ich habe eine gesamte Artikelliste und ein Bestellformular. Wenn ich aus der Artikelliste in der letzten Spalte einen Wert zur Bestellmenge eingebe so möchte ich, dass dieser Artikel automatisch in das Bestellformular [in die jeweils nächste freie Zeile] des Bestellformular übernommen wird.
Ich bekomme es leider mit sverweis o.ä. nicht hin, da d ie Formel ja auch nicht überprüft, welche nächste Zeile im Bestellformular tatsächlich frei ist.
https://www.herber.de/bbs/user/90028.xls
Wäre schön, wenn mir hier jemand helfen könnte.
DAnke und Gruß
zwilling77

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Artikel in nächste freie Zeile der Bestellung
08.04.2014 10:29:21
UweD
Hallo
per Makro ginge das
Wenn ich mir die Artikelliste (nur 2 L) ansehe, willst du das doch auf verschiedenen Lieferanten verteilen oder?
Dazu vorher für jeden Lieferanten ein eigenes Bestellformular anlegen.
Das Makro kannst du über den Button nach der Eingabe starten.
https://www.herber.de/bbs/user/90033.xlsm
Sub Neu()
On Error GoTo Fehler
Dim TB1, TB2
Dim SP1%, SP2%, ZE&, LR1&, LR2&
Dim Lief$
Application.ScreenUpdating = False
Set TB1 = Sheets("Artikelliste")
SP1 = 2 'Spalte B
SP2 = 2 'Spalte B
ZE = 15 'früheste Einfügezeile
LR1 = TB1.Cells(Rows.Count, SP1).End(xlUp).Row
Lief = TB1.Cells(LR1, 11) 'Lieferant
'prüfen auf Bestellformular
On Error Resume Next
Set TB2 = Sheets("Bestellformular " & Lief)
If Err.Number  0 Then
MsgBox "Bestellung für Lieferant" & vbLf & vbLf & "    " & Lief & vbLf & vbLf _
& "nicht vorhanden"
Err.Clear
Exit Sub
End If
On Error GoTo Fehler
LR2 = WorksheetFunction.Max(TB2.Cells(Rows.Count, SP2).End(xlUp).Row + 1, ZE)
TB2.Cells(LR2, 2) = TB1.Cells(LR1, 2) 'Artikel
TB2.Cells(LR2, 4) = TB1.Cells(LR1, 3) 'Bez
TB2.Cells(LR2, 9) = TB1.Cells(LR1, 8) 'Einheit
TB2.Cells(LR2, 10) = TB1.Cells(LR1, 12) 'Menge
TB2.Activate
'*** Fehlerbehandlung
Err.Clear
Fehler:
If Err.Number  0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err. _
Clear
End Sub

Gruß UweD

Anzeige
AW: Artikel in nächste freie Zeile der Bestellung
08.04.2014 10:55:37
Micha
Hallo UweD,
danke. Ja der Grundgedanke von Dir ist richtig. Bei Deinem Makro kommt jetzt immer nur Artikel 13, die in dem Bestellformular Müller eingefügt wird. Artikel 1 enthält ja auch eine Bestellmenge mit Lieferanbbt Müller, die aber nicht ins Bestellformular übertragen wird.
Angenommen in meiner Artikelliste stehen 10 Artikel Lieferant Müller. Ich stelle nun fest, dass ich dringen davon 5 Artikel bestellen muss, in der ich meine Artikelliste nehme und von diesen Artikeln jeweils durch Eingabe der Bestellmenge diese zu bestellenden Artikel angebe. Durch Eingabe der Berstellmenge sollen diese Artikel direkt in das Bestellformular übernommen werden.
Gruß
zwilling77

Anzeige
AW: Artikel in nächste freie Zeile der Bestellung
08.04.2014 16:52:40
UweD
Hallo nochmal
- Das alte makro löschen
- Rechtsclick auf den Tabellenblattreiter "Artikelliste"
- Code anzeigen
- das folgende Makro einfügen
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fehler
If Not Intersect(Range("L11:L82"), Target) Is Nothing Then
If Target.Count  1 Then
MsgBox "Nur eine Zelle ändern"
Application.EnableEvents = False
Target = ""
Application.EnableEvents = True
Exit Sub
End If
If Target.Value  "" Then
Dim TB1, TB2
Dim SP%, ZE&, LR1&, LR2&
Dim Lief$
Application.ScreenUpdating = False
Set TB1 = Sheets("Artikelliste")
SP = 2 'Spalte B
ZE = 15 'früheste Einfügezeile
Lief = Me.Cells(Target.Row, 11) 'Lieferant
'prüfen auf Bestellformular
On Error Resume Next
Set TB2 = Sheets("Bestellformular " & Lief)
If Err.Number  0 Then
MsgBox "Bestellung für Lieferant" & vbLf & vbLf & "    " & Lief & vbLf & vbLf _
& "nicht vorhanden"
Application.EnableEvents = False
Target = ""
Application.EnableEvents = True
Err.Clear
Exit Sub
End If
On Error GoTo Fehler
LR2 = WorksheetFunction.Max(TB2.Cells(Rows.Count, SP).End(xlUp).Row + 1, ZE)
TB2.Cells(LR2, 2) = Me.Cells(Target.Row, 2) 'Artikel
TB2.Cells(LR2, 4) = TB1.Cells(Target.Row, 3) 'Bez
TB2.Cells(LR2, 9) = TB1.Cells(Target.Row, 8) 'Einheit
TB2.Cells(LR2, 10) = TB1.Cells(Target.Row, 12) 'Menge
End If
End If
'*** Fehlerbehandlung
Err.Clear
Fehler:
If Err.Number  0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err. _
Clear
Application.EnableEvents = True
End Sub



zusätzlich in eine normales Modul folgendes Makro
Sub Resetten()
On Error GoTo Fehler
Dim WB, SH
Set WB = ActiveWorkbook
For Each SH In WB.Sheets
If InStr(SH.Name, "Bestellformular") > 0 Then
Application.EnableEvents = False
SH.Range("B15:J35").ClearContents
Application.EnableEvents = True
End If
Next
Application.EnableEvents = False
Sheets("Artikelliste").Range("L11:L82").ClearContents
'*** Fehlerbehandlung
Err.Clear
Fehler:
If Err.Number  0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err.Clear
Application.EnableEvents = True
End Sub

Dieses Makro auf einen Button im Blatt Artikelliste legen.
Gruß UweD

Anzeige
AW: Artikel in nächste freie Zeile der Bestellung
09.04.2014 08:11:45
UweD
Hi
das 2. Makro kann noch gekürzt werden...
Sub Resetten()
On Error GoTo Fehler
Dim WB, SH
Set WB = ActiveWorkbook
For Each SH In WB.Sheets
If InStr(SH.Name, "Bestellformular") > 0 Then SH.Range("B15:J35").ClearContents
Next
Application.EnableEvents = False
Sheets("Artikelliste").Range("L11:L82").ClearContents
'*** Fehlerbehandlung
Err.Clear
Fehler:
If Err.Number  0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err.Clear
Application.EnableEvents = True
End Sub

Gruß UweD

322 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige