Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

zwei Zellen mit gleichen Wert, Werte Löschen
#1
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
Antworten Top
#2
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
[-] Folgende(r) 1 Nutzer sagt Danke an Werner.M für diesen Beitrag:
  • alabama01
Antworten Top
#3
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)
Antworten Top
#4
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
Antworten Top
#5
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
Antworten Top
#6
Hallo Frank,

lad mal deine Mappe hier hoch.

Gruß Werner
[-] Folgende(r) 1 Nutzer sagt Danke an Werner.M für diesen Beitrag:
  • alabama01
Antworten Top
#7

.xlsm   Test Lager.xlsm (Größe: 41,17 KB / Downloads: 5)
Hallo Werner
PW FrankT
Antworten Top
#8
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


Angehängte Dateien
.xlsm   Frank.xlsm (Größe: 39,84 KB / Downloads: 1)
[-] Folgende(r) 1 Nutzer sagt Danke an Werner.M für diesen Beitrag:
  • alabama01
Antworten Top
#9
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste