'Kanten abziehne wenn die Kante stärker als das "Max_Fügemaß" ist oder Platte oder Belag nicht gefügt werden kann
Dim LA As Long
Dim vRetP As Variant
Dim vRetBI As Variant
Dim vRetBA As Variant
Dim Abzugsmaß As Long
With Worksheets("Zwischenablage")
For LA = .Cells(Rows.Count, 5).End(xlUp).Row To 1 Step -1
If Not IsEmpty(.Cells(LA, 3).Value) Then vRetP = Application.IfError(Application.VLookup(.Cells(LA, 3).Value, Range("Lager"), 11, False), "Fehlendes Material")
If Not IsEmpty(.Cells(LA, 9).Value) Then vRetBI = Application.IfError(Application.VLookup(.Cells(LA, 9).Value, Range("Lager"), 11, False), "Fehlendes Material")
If Not IsEmpty(.Cells(LA, 8).Value) Then vRetBA = Application.IfError(Application.VLookup(.Cells(LA, 8).Value, Range("Lager"), 11, False), "Fehlendes Material")
If Left(.Cells(LA, 12).Value, 3) = "KA_" Then
Abzugsmaß = CLng(Mid(.Cells(LA, 12), InStrRev(.Cells(LA, 12), "X") + 1))
If Abzugsmaß > Range("Max_Fügemaß").Value Or vRetP <> "x" Or vRetBI <> "x" Or vRetBA <> "x" Then
.Cells(LA, 19).Value = .Cells(LA, 18).Value - Abzugsmaß
End If
End If
Sub M_snb()
sn = Tabelle29.Cells(1).CurrentRegion
sp = Tabelle2.Cells(1).CurrentRegion
y = Range("Max_Fügemaß").Value
With CreateObject("scripting.dictionary")
For j = 1 To UBound(sp)
.Item(sp(j, 1)) = sp(11)
Next
For j = 1 To UBound(sn)
If Left(sn(j, 12), 3) = "KA_" Then
sq = Split(sn(j, 12), "_")
If Val(sq(UBound(sq))) > y Or .Item(sn(j, 3)) <> "x" Or .Item(sn(j, 8)) <> "x" Or .Item(sn(j, 9)) <> "x" Then sn(j, 19) = sn(j, 18) - Val(sq(UBound(sq)))
End If
Next
End With
End Sub
29.11.2022, 20:27 (Dieser Beitrag wurde zuletzt bearbeitet: 29.11.2022, 20:44 von legiminator.)
Hallo snb,
vielen dank für deinen Vorschlag.
Ich habe es eingelesen und leider zeigt es mit einen fehler an
"Sub oder Funktion nicht definiert"
Wo leigt hier der Fehler?
Hallo Earlfred,
vielen Dank für ein letztes aufbäumen.
Code:
For LA = .Cells(Rows.Count, 5).End(xlUp).Row To 1 Step -1
Leider ziegt es mir bei der Zeile einen Syntaxfehler an.
Ich habe die Zeile mit den Bestehenden verglichen. Habe dann gesehen das der "." zu viel ist. Wenn ich den lösche zeigt es mir die Meldung an "Fehler beim Kompelieren" "Erwartet: Anweisungsende"
Hier bin ich nicht weiter gekommen. Vermutlich ein Klax zum beheben. Ich selber komme leider hier nicht weiter.
Hallo EarlFred,
Danke für die Info zum Thema Hygiene. Ich selber kann die Schnippsel welche ich für diese Codes aus dem Internet zusammen suche leider schlecht bewerten. Da gehe ich doch zu leihenhaft vor. Aber solche Basics sind Gold wert.
Entschuldige meine "schwammigen Antworten" hier fehlt mir eure Denkweise. An und für sich sollte keine falsche Materialdefinfition rein kommen. Da die Überprüfung der Richtigen schreibweise nur über eine Bedingte Formatierung mit einfärben der Zelle funktionier ist also doch nichts unmöglich.
Sollte sich keine Übereintreffung finden ist das kleiner Übel das hier nichts geschiet. Eine aufplopende Fehlermeldung wäre trozdem sehr brauchbar. Von dem Maß soll nichts abgezogen werden.
Ich danke dir für deine Gedult
Hallo Schauan,
Zitat:nicht MsgBox vRetP = ... sondern nur MsgBox vRetP
Ich kann dir bestätigen, dass mein Code einwandfrei in der Mustermappe funktioniert. Der Punkt muss auch sein, um ordentlich zu referenzieren (Bezug zum With-Block).
Ich vermute also, dass der Code von Dir geändert wurde, was ich allerdings inhaltlich aus der Ferne schlecht bewerten kann.
Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:1 Nutzer sagt Danke an Gast für diesen Beitrag 28 • legiminator
30.11.2022, 12:18 (Dieser Beitrag wurde zuletzt bearbeitet: 30.11.2022, 12:28 von legiminator.)
Hallo Snb,
vielen Dank für die neue Fassung.
Zwei dinge sind mir aufgefallen:
- In der Spalte F wird ab Zeile 5 immer das Maß "X" abgezogen.
- Es wird nicht berücksichtigt ob das Material bei Fügen ein X hat. (Spalte 11, Lager)
- Es wird immer 23mm abgezogen. Hier wird aus dem Materialcodes aus den Spalten 10-13 vermutlich immer der Falsche Teil ausgeschnitten.
Code:
'Kanten abziehne wenn die Kante stärker als das "Max_Fügemaß" ist oder Platte oder Belag nicht gefügt werden kann
sn = Worksheets("zwischenablage").Cells(1).CurrentRegion
sp = Worksheets("Lager").Cells(1).CurrentRegion
y = Range("Max_Fügemaß").Value '-> Entspricht aktuell "2"
With CreateObject("scripting.dictionary")
For jj = 2 To UBound(sp)
If sp(jj, 11) <> "x" Then .Item(sp(jj, 1)) = sp(jj, 11)
Next
For jj = 1 To UBound(sn)
If Left(sn(jj, 12), 3) = "KA_" Then
sq = Split(sn(jj, 12), "_")
If Val(sq(UBound(sq))) > y Or .exists(sn(jj, 3)) Or .exists(sn(jj, 8)) Or .exists(sn(jj, 9)) Then sn(jj, 5) = sn(jj, 5) - Val(sq(UBound(sq)))
End If
Next
End With
With CreateObject("scripting.dictionary")
For jj = 2 To UBound(sp)
If sp(jj, 11) <> "x" Then .Item(sp(jj, 1)) = sp(jj, 11)
Next
For jj = 1 To UBound(sn)
If Left(sn(jj, 13), 3) = "KA_" Then
sq = Split(sn(jj, 13), "_")
If Val(sq(UBound(sq))) > y Or .exists(sn(jj, 3)) Or .exists(sn(jj, 8)) Or .exists(sn(jj, 9)) Then sn(jj, 5) = sn(jj, 5) - Val(sq(UBound(sq)))
End If
Next
End With
With CreateObject("scripting.dictionary")
For jj = 2 To UBound(sp)
If sp(jj, 11) <> "x" Then .Item(sp(jj, 1)) = sp(jj, 11)
Next
For jj = 1 To UBound(sn)
If Left(sn(jj, 10), 3) = "KA_" Then
sq = Split(sn(jj, 10), "_")
If Val(sq(UBound(sq))) > y Or .exists(sn(jj, 3)) Or .exists(sn(jj, 8)) Or .exists(sn(jj, 9)) Then sn(jj, 6) = sn(jj, 6) - Val(sq(UBound(sq)))
End If
Next
End With
With CreateObject("scripting.dictionary")
For jj = 2 To UBound(sp)
If sp(jj, 11) <> "x" Then .Item(sp(jj, 1)) = sp(jj, 11)
Next
For jj = 1 To UBound(sn)
If Left(sn(jj, 11), 3) = "KA_" Then
sq = Split(sn(jj, 11), "_")
If Val(sq(UBound(sq))) > y Or .exists(sn(jj, 3)) Or .exists(sn(jj, 8)) Or .exists(sn(jj, 9)) Then sn(jj, 6) = sn(jj, 6) - Val(sq(UBound(sq)))
End If
Next
End With
'Worksheets("zwischenablage").CurrentRegion = sn
Den Code habe ich mal entsprechend an meine Bereiche angepasst.
Beim abspielen wurde mir die letzte Zeile nicht genommen. Deswegen habe ich Sie mal ausgeschaltet
Die Bereiche in denen zum Ende hin immer das Maß abgezogen werden soll konnte ich nicht ändern (19 anstatt 5 und 20 anstatt 6). Hier kommt dann die Fehlermeldung "Index außerhalb des gultigen Bereichs"
Der Code hat leider nichts in meiner Liste geändert. Das Muster habe ich aus der origignal Datei erstellt.
Ich bin ein wenig verweifelt
Hallo EarlFred,
anbei ein Screenshot wie es aussihet wenn ich es in die originale Datei oder auch in die Musterdatei einlese.
Code:
For LA = .Cells(Rows.Count, 5).End(xlUp).Row To 1 Step -1
Diese Zeile wird rot gefärbt und es kommt beim durchlaufen des Codes die Meldung Syntaxfehler.
Kann es an grundlegenden Einstellungen von Excel liegen?
Zitat:Stimmt nicht; du hast den Code nicht verstanden.
Das mag ich jetzt nicht bestreiten. Das Resultat zeigt aber das hier das Maß nicht abgezogen wird. Wenn im Material das "X" Fehlt muss das Maß der Kante (Spalte 10-13) abgezogen werden.
(Wird das Material nicht gefunden soll nichts abgezogen werden)
Zitat:Verrate mal was abgezogen werden müsste.
Was ist das 'richtige' Teil ?
Wenn eines der Materialien aus der Spalte 3,8 oder 9 das "x" hat soll das Maß des Kantenmaterials aus der Spalte (10-13) abgezogen werden.
Hier möchte ich jede Kante/Spalte einzeln abarbeiten.
Das Maße was abzuziehen ist, sind von rechts nach links die Ziffen bis zum ersten "x" ("KA_W980_ST15_23X02" -> "02")
Diese 02mm sollen dann dementsprechend von dem Maß aus der Spalte 19 oder 20 abgezogen werden.
Ich hoffe du kannst damit was Anfange.
Vielen Dank schon mal für deine Hilfe!
Hallo Zusamme,
jetzt hat es doch etwas gedauert bis ich zur Umsetztung gekommen bin.
Ich habe mich nochmals hin gesetzt und mit euren Vorschlägen gebastelt.
Daraus habe ich jetzt eine läsung erstellt die für mich geht. Entschudligt wenn es so aussieht das es sehr deletantisch zusammen gebalstelt ist.
Code:
'Kanten abziehne wenn die Kante stärker als das "Max_Fügemaß" ist oder Platte oder Belag nicht gefügt werden kann
Dim LA As Integer
For LA = Cells(Rows.Count, 5).End(xlUp).Row To 1 Step -1
Dim vRetP As Variant
Dim vRetBI As Variant
Dim vRetBA As Variant
If Left(Cells(LA, 12).Value, 3) = "KA_" Then
If CDec(Mid(Cells(LA, 12), InStrRev(Cells(LA, 12), "X") + 1)) > Range("Max_Fügemaß") Or _
vRetP <> ("x") Or _
vRetBI <> ("x") Or _
vRetBA <> ("x") Then
Cells(LA, 19).Value = Cells(LA, 19) - Mid(Cells(LA, 12), InStrRev(Cells(LA, 12), "X") + 1)
End If
End If
If Left(Cells(LA, 13).Value, 3) = "KA_" Then
If CDec(Mid(Cells(LA, 13), InStrRev(Cells(LA, 13), "X") + 1)) > Range("Max_Fügemaß") Or _
vRetP <> ("x") Or _
vRetBI <> ("x") Or _
vRetBA <> ("x") Then
Cells(LA, 19).Value = Cells(LA, 19) - Mid(Cells(LA, 13), InStrRev(Cells(LA, 13), "X") + 1)
End If
End If
If Left(Cells(LA, 10).Value, 3) = "KA_" Then
If CDec(Mid(Cells(LA, 10), InStrRev(Cells(LA, 10), "X") + 1)) > Range("Max_Fügemaß") Or _
vRetP <> ("x") Or _
vRetBI <> ("x") Or _
vRetBA <> ("x") Then
Cells(LA, 20).Value = Cells(LA, 20) - Mid(Cells(LA, 10), InStrRev(Cells(LA, 10), "X") + 1)
End If
End If
If Left(Cells(LA, 11).Value, 3) = "KA_" Then
If CDec(Mid(Cells(LA, 11), InStrRev(Cells(LA, 11), "X") + 1)) > Range("Max_Fügemaß") Or _
vRetP <> ("x") Or _
vRetBI <> ("x") Or _
vRetBA <> ("x") Then
Cells(LA, 20).Value = Cells(LA, 20) - Mid(Cells(LA, 11), InStrRev(Cells(LA, 11), "X") + 1)
End If
End If