Hallo VBA Profis
Ich habe eine Tabelle für ein kleines Warenlager erstellt (Exel 2016).
Funktioniert, Dank Forum Google und eigenes kleines Wissen, auch super.
Nun möchte ich gerne, wenn bestellte Anzahl und gelieferte Anzahl gleich
ist, dass in diesen 2 Zellen dann nichts mehr drin steht.
Dadurch werden bedingte Formatierungen zurückgesetzt und die
Bestellung abgeschlossen.
Das ganze geht ab Zeile 6 los. Darüber sind Überschriften.
in Spalte I trage ich die bestellte Anzahl ein
in Spalte K die Lieferung/Teillieferung
in Spalte L werden die Werte von K addiert
sinngemäß: (wenn L>=I dann L und I ="")
Das ganze natürlich als VBA-Code.
Da ich von VBA Null Ahnung habe,
wäre es super, wenn Ihr Profis mir
helfen würdet.
Diesen Code habe ich ausprobiert:
Dim i As Integer
Dim ADD_L As String
Dim ALL_I As String
For i = 6 To 32766
ADD_L = "L" + Trim(CStr(i))
ALL_I = "I" + Trim(CStr(i))
If Range(ADD_L).Value >= Range(ALL_I).Value Then
Range(ADD_L).Value = ""
Range(ALL_I).Value = ""
End If
Next i
Nach "Sub Ausführen" hat es einmal funktioniert
danach hat sich Exel "Aufgehangen".
Danke alabama01
Hallo,
so:
Code:
Option Explicit
Public Sub Leeren()
Dim loLetzte As Long, i As Long
Application.ScreenUpdating = False
With Worksheets("Tabelle1") 'Blattname anpassen
loLetzte = .Cells(.Rows.Count, "I").End(xlUp).Row
If loLetzte > 5 Then
For i = 6 To loLetzte
If .Cells(i, "L") >= .Cells(i, "I") Then
.Cells(i, "I").ClearContents
.Cells(i, "L").ClearContents
End If
Next i
End If
End With
End Sub
Gruß Werner
Vielen Lieben Dank Werner.M für die schnelle Antwort
Ich habe Deinen Code gleich ausprobiert
Funktioniert super wenn ich auf das kleine Dreieck
"Sub/User Form ausführen" klicke. Leider nicht Automatisch.
Weißt du was ich falsch mache?
Gruß alabama01(Frank)
Hallo,
da war je jetzt nicht wirklich die Rede davon.
Und was heißt hier "automatisch"?
Die Codeausführung kann nur auf ein Ereignis reagieren, z.B. auf eine Werteeingabe des Benutzers in der Tabelle.
Dann stellt sich aber die Frage: Auf welches Ereignis soll die Reaktion erfolgen. Sprich der Code soll starten wenn der Nutzer wo eine Eingabe macht?
Gruß Werner
Hallo Werner
in Spalte I Trage ich die bestellte Menge ein. z.B. 30
in Spalte K die gelieferte Menge/Teillieferung z.B 15
bei der nächsten Lieferung wieder z.B 15
in Spalte L wird die Teillieferung addiert. = 30
Nun Dachte ich, wenn in Spalte L der gleichen wert wie in Spalte I
erreicht wird, dass eben "Automatisch" Spalte I und L in der gleichen
Zeile die 30 gelöscht wird (b.z.w. Zellen leer).
Habe ich diesen Code Falsch Platziert?
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Waren Ausgang "-Bestand"
If Target.Column = 5 Then
On Error GoTo Err_Exit
Application.EnableEvents = False
Cells(Target.Row, 7) = Cells(Target.Row, 7) - Target
End If
'Waren Eingang "+Bestand/Teillieferung"
If Target.Column = 11 Then
On Error GoTo Err_Exit
Application.EnableEvents = False
Cells(Target.Row, 7) = Cells(Target.Row, 7) + Target
Cells(Target.Row, 12) = Cells(Target.Row, 12) + Target
End If
'"Datum" Waren Eingang
If Target.Column = 11 And Target.Value <> 0 Then Cells(Target.Row, 13) = Date
'"Datum" Bestellung
If Target.Column = 9 And Target.Value <> 0 Then Cells(Target.Row, 10) = Date
'"Datum" Waren Ausgang
If Target.Column = 5 And Target.Value <> 0 Then Cells(Target.Row, 6) = Date
'Waren Ausgang "Eingabe Löschen"
If Not Application.Intersect(Target, Range("e6:e200")) _
Is Nothing Then Range("e6:e200") = ""
'Waren Eingang "Eingabe Löschen"
If Not Application.Intersect(Target, Range("k6:k200")) _
Is Nothing Then Range("k6:k200") = ""
Err_Exit:
Application.EnableEvents = True
End Sub
Public Sub Leeren()
Dim loLetzte As Long, i As Long
Application.ScreenUpdating = False
With Worksheets("Test") 'Blattname anpassen
loLetzte = .Cells(.Rows.Count, "I").End(xlUp).Row
If loLetzte > 5 Then
For i = 6 To loLetzte
If .Cells(i, "L") >= .Cells(i, "I") Then
.Cells(i, "I").ClearContents
.Cells(i, "L").ClearContents
End If
Next i
End If
End With
End Sub
Gruß Frank
Hallo Frank,
lad mal deine Mappe hier hoch.
Gruß Werner
Hallo Frank,
schau dir deine Datei mal an.
Im Eingabefeld für die Lieferung/Teillieferung wird dir immer der Wert der letzten Lieferung/Teillieferung angezeigt.
Das so lange, bis die Lieferung der Bestellmenge entspricht (oder größer ist).
Dann werden die entsprechenden Felder, incl. das Datum für den Warenausgang, geleert.
Gruß Werner
Hallo Werner
Das ist ja Mega-Super. Vielen lieben Dank.
Für mich sieht das wie eine "Doktor-Arbeit" aus.
Alles super, so wie ich mir das vorgestellt habe.
Danke dir!
Gruß Frank