Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1736to1740
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Code anpassen

VBA Code anpassen
11.02.2020 15:12:08
Jan
Hallo,
habe ein Problem mit einem vorhandenen Code und komme nicht drauf, wie ich ihn an meine Bedürfnisse anpassen kann.
hier der Code:

Sub Aufteilen()
Dim lngLetzte        As Long
Dim lngEinfüg        As Long
Dim i                As Long
Dim dblMaxKapa       As Double
Dim lngAnzZeilen     As Long
Dim fVarProd         As Variant
Dim lngStück         As Long
Dim lngFormen        As Long
Dim lngCalcStatus    As Long
Dim dblAufgeteilt    As Double
On Error GoTo ErrExit
lngCalcStatus = Application.Calculation
Application.Calculation = xlCalculationManual
With Worksheets("F7 Artikelebene")
dblMaxKapa = .Cells(2, "Y").Value
lngLetzte = .Cells(.Rows.Count, "W").End(xlUp).Row
For i = 4 To lngLetzte
If .Cells(i, "W").Value  "" Then
fVarProd = .Cells(i, "W").Resize(, 2).Value
lngStück = .Cells(i, "Y").Value
lngFormen = .Cells(i, "AA").Value
lngAnzZeilen = Application.Min(lngFormen, Application.RoundUp(lngStück / dblMaxKapa, 0) _
)
With Worksheets("F7 Soll ausgelastet")
lngEinfüg = Application.Max(8, .Cells(.Rows.Count, 1).End(xlUp).Row + 1)
With .Cells(lngEinfüg, 1)
.Resize(lngAnzZeilen, 2).Value = fVarProd
.Offset(, 2).Resize(lngAnzZeilen).Value = Application.Min(dblMaxKapa, lngStück /  _
lngAnzZeilen)
dblAufgeteilt = (lngAnzZeilen - 1) * Application.Min(dblMaxKapa, lngStück /   _
lngAnzZeilen)
.Offset(lngAnzZeilen - 1, 2).Value = lngStück - dblAufgeteilt
End With
End With
End If
Next i
End With
ErrExit:
Application.Calculation = lngCalcStatus
End Sub

in der Datei, siehe unten, ist beschrieben, welche Lösung ich anstrebe.
an sich möchte ich, dass wenn die Anzahl an Formen größer als 1 und durch die vorgegebene Stückzahl pro Artikelnummer, zuerst 44,1 (maximale Formkapazität) angezeigt wird, dann der Rest der Stückzahl. und nicht wie bisher gleichverteilt...in der Beispieldatei wird es deutlicher...
Bitte um Eure freundliche Unterstützung
Gruss
Jan
https://www.herber.de/bbs/user/135129.xlsx

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code anpassen
11.02.2020 16:24:36
Hajo_Zi
Hallo Jan,
das geht nicht, da eine XLSX Datei kein Makro enthalten kann.
Ich sehe keinen Grund eine Datei 2x zu speichern und den Code einzufügen.
Ich führe keine Liste unter welchem Dateinamen ich die Datei aus dem Forum gespeichert habe.
Der Name steht ja im Beitrag.

AW: VBA Code anpassen
11.02.2020 16:46:33
Jan
ok, verstehe...habe den Gesamtcode eingefügt, damit Du Dir ein Bild machen kannst...
kannst Du mir bei diesem Teil des Codes helfen?
Bekomme es nicht hin, dass er mir zuerst die Stückzahlen die größer als 44,1 sind nicht bei der ersten Teildivision 44,1 anzeigt und dann den Rest ausgibt, der noch übrig bleiben würde...
With Worksheets("F6 Soll ausgelastet")
lngEinfüg = Application.Max(8, .Cells(.Rows.Count, 1).End(xlUp).Row + 1)
With .Cells(lngEinfüg, 1)
.Resize(lngAnzZeilen, 2).Value = fVarProd
.Offset(, 2).Resize(lngAnzZeilen).Value = Application.Min(dblMaxKapa, lngStück / lngAnzZeilen)
dblAufgeteilt = (lngAnzZeilen - 1) * Application.Min(dblMaxKapa, lngStück / lngAnzZeilen)
.Offset(lngAnzZeilen - 1, 2).Value = lngStück - dblAufgeteilt
End With
Anzeige
AW: VBA Code anpassen
11.02.2020 18:38:31
Matthias
Moin!
Mit deinem Ansatz kommst du glaube ich nicht weiter, wenn du 3 oder mehr Formen hast. Da solltest du eine SChleife nutzen und immer die Anzahl die eingetragen wurde abziehen. Dieser neue Wert ist dann das Abbruchkriterium. So kannst du beliebig viele Formen abarbeiten. Frage ist aber, was sol passieren, wen nicht alle Formen reichen, um die Anzahl darzustellen?
Für den ersten Gedanken haben ich mal deinen Code angepasst.
Sub Aufteilen()
Dim lngLetzte        As Long
Dim lngEinfüg        As Long
Dim i                As Long
Dim dblMaxKapa       As Double
Dim fVarProd         As Variant
Dim lngStück         As Long
Dim lngFormen        As Double
Dim lngCalcStatus    As Long
Dim dblAufgeteilt    As Double
On Error GoTo ErrExit
lngCalcStatus = Application.Calculation
Application.Calculation = xlCalculationManual
lngEinfüg = Application.Max(8, Worksheets("F7 Soll ausgelastet").Cells(Worksheets("F7 Soll  _
ausgelastet").Rows.Count, 1).End(xlUp).Row + 1)
With Worksheets("F7 Artikelebene")
dblMaxKapa = .Cells(2, "Y").Value
lngLetzte = .Cells(.Rows.Count, "W").End(xlUp).Row
For i = 5 To lngLetzte     'start in 5 nicht in 4
If .Cells(i, "W").Value  "" Then
fVarProd = .Cells(i, "W").Resize(, 2).Value
dblStück = CDbl(.Cells(i, "Y").Value)
lngFormen = .Cells(i, "AA").Value
Do
With Worksheets("F7 Soll ausgelastet")
.Cells(lngEinfüg, 1).Resize(1, 2).Value = fVarProd
.Cells(lngEinfüg, 3).Value = Application.Min(dblMaxKapa, dblStück)
dblStück = dblStück - dblMaxKapa
lngEinfüg = lngEinfüg + 1
lngFormen = lngFormen - 1
End With
Loop While dblStück > 0 And lngFormen > 0
End If
Next i
End With
ErrExit:
Application.Calculation = lngCalcStatus
End Sub

VG
Anzeige
AW: VBA Code anpassen
17.02.2020 16:21:01
Jan
Hi Matthias,
danke für Deine liebe Hilfe.
der Gedankenansatz ist folgender:
wenn das Soll (gesamtstückzahl) zum Beispiel 120 Stück ist und pro Artikel auf die Formen aufgeteilt werden kann, Beispiel 3 Formen,dann möchte ich sehen, den Artikel 3mal untereinander, 1. 44,1 (volle Kapazität einer Form(zieht er aus $Y$2) 2. 44,1 und 3. den Rest mit 31,8
wenn nur eine Form da ist, muss er die Gesamststückzahl komplett anzeigen auf dem einen Artikel.
und dann, wenn die Gesamtstückzahl zum Beispiel 100 beträgt und ich habe nur zwei formen, dann soll er auf beim ersten 44,1 verteilen und den Rest auf die 2. Form in dem Fall 50,9
ginge das?
Anzeige
AW: VBA Code anpassen
17.02.2020 16:22:33
Jan
Hi Matthias,
danke für Deine liebe Hilfe.
der Gedankenansatz ist folgender:
wenn das Soll (gesamtstückzahl) zum Beispiel 120 Stück ist und pro Artikel auf die Formen aufgeteilt werden kann, Beispiel 3 Formen, dann möchte ich sehen, den Artikel 3mal untereinander, 1. 44,1 (volle Kapazität einer Form(zieht er aus $Y$2) 2. 44,1 und 3. den Rest mit 31,8
wenn nur eine Form da ist, muss er die Gesamtstückzahl komplett anzeigen auf dem einen Artikel.
und dann, wenn die Gesamtstückzahl zum Beispiel 100 beträgt und ich habe nur zwei formen, dann soll er auf beim ersten 44,1 verteilen und den Rest auf die 2. Form in dem Fall 50,9
ginge das?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige