löscht Spalten nicht
#1
guten Morgen an Alle,

ich muss eine Bestandsdatei aufbauen und bin auch schon sehr weit gekommen.
Habe all mein Nichtwissen und vorhandene Dateien durchsucht und angepasst.

Soweit läuft alles bis auf eine kleine Winzigkeit:

Blatt: Eingabe
Artikel-Nr:   D4
Zugang:     E18
Abgang:     F18

Diese Daten werden eingetragen ins Archiv fortlaufend - klappt perfekt
Diese Daten erhöhen oder senden den Bestand auf dem Blatt Artikel- klappt perfekt

Leider löscht er nach der Eingabe nicht E18 und F18 und D4, Das ist das Problem

Hier das Makro dazu:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim myRange As Range
    If (Target.Address = "$E$18" Or Target.Address = "$E$20") _
        And Trim(Target.Text) <> "" And Not IsError(Cells(18, 5).Value) Then
        With Worksheets("Artikel")
            If .FilterMode Then .ShowAllData
            Set myRange = .Columns(1).Find(What:=Cells(4, 4).Value, _
                LookAt:=xlWhole, LookIn:=xlValues)
            If Not myRange Is Nothing Then
                If Target.Row = 18 Then .Cells(myRange.Row, 6).Value = _
                    .Cells(myRange.Row, 6).Value - Target.Value _
                    Else .Cells(myRange.Row, 6).Value = _
                    .Cells(myRange.Row, 6).Value + Target.Value
            Else
                MsgBox "Wert " & Cells(4, 4).Value & " nicht in der Tabelle.", 16, "Fehler"
            End If
        End With
    Else
        If Target.Address = "$D$4" Then
            Application.EnableEvents = False
            Cells(18, 5).Value = 0                                Hier sollte er doch alles auf Null setzen? :16:
            Cells(20, 5).Value = 0
            Application.EnableEvents = True
        End If
    End If
End Sub
 

Kann jemand mir den Fehler zeigen

danke Annette
Top
#2
Hallo Annette,

beschreibe bitte, wie so eine Eingabe in welcher Reihenfolge geschieht bzw. wann genau dieser Code ausgeführt werden soll.
Außerdem prüfst Du mehrmals die Zelle E20 (Cells(20, 5) ) !?

Gruß Uwe
Top
#3
Hallo Uwe,

also ich gebe bei D4 die Artkelnummer ein.

dann bei E18 den Wert des Abganges oder bei E20 einen Zugang.

Der jeweilige Wert wird auf Blatt Artikel abgezogen oder addiert Spalte 6(F)   klappt super

Gleichzeitig wird ein Blatt Archiv geführt dort wirt Art-Nr.Name und Zu+ oder Abgang eingetragen (Spalten A-D) Klappt super

Damit eine Eintragung erfolgt habe ich ein Button, da liegt das Makro hinter.

Erst wenn ich eine neue Artikelnummer eintragen wird E18 oder E20 gelöscht,das ist doof.

danke Annette
Top
#4
Hallo Annette,

Dein Code passt nicht zu dem was Du beschrieben hast.

Zitat:...
Damit eine Eintragung erfolgt habe ich ein Button, da liegt das Makro hinter.
...

Dein Makro wird ausgeführt werden sobald sich die Werte in den überwachten Zellen ändert.
Zumindest wenn Du den Code hinter das entsprechende Blatt hängst.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
...

Wenn Du die Eintragung über einen Button auslöst kannst Du stattdessen prüfen, ob die Zellen D4, E18 oder E20 nicht leer sind.
Das ginge dann auch über eine "normales" Makro.

Code:
Sub EintragungenÜbernehmen()

If Not IsEmpty(Range("D4")) And Not IsEmpty(Range("E18")) Or Not IsEmpty(Range("E20")) Then
.
.
.
Endi If

End Sub

Das Makro gehört dann hinter den Button.
Unabhändid davon glaube ich nicht, dass diese Codezeilen funktionieren.

Code:
Else
       If Target.Address = "$D$4" Then
           Application.EnableEvents = False
           Cells(18, 5).Value = 0                                Hier sollte er doch alles auf Null setzen? 16
           Cells(20, 5).Value = 0
           Application.EnableEvents = True
       End If
   End If

Gruß
Ich
Top
#5
Hallo Ich

ich habe noch ein bißchen rumgewerkelt mit meinem Nichtwissen.

Es ist so, dass wenn ich die Artikelnummer eintrage dann erfolgt ohne Button die Eintragung.
Sehr doof in diesem Fall

Also mich an eine neues gewagt: Dieses Mal dein Tipp dem Button hinterlegt,leider kommt Fehler "Variable nicht definiert" und steht bei Target.Address=........ 

Sub EintragungenÜbernehmen()
If Not IsEmpty(Range("D4")) And Not IsEmpty(Range("E18")) Or Not IsEmpty(Range("E20")) Then
    Dim myRange As Range
    If (Target.Address = "$E$18" Or Target.Address = "$E$20") _
        And Trim(Target.Text) <> "" And Not IsError(Cells(18, 5).Value) Then
        With Worksheets("Artikel")
            If .FilterMode Then .ShowAllData
            Set myRange = .Columns(1).Find(What:=Cells(4, 4).Value, _
                LookAt:=xlWhole, LookIn:=xlValues)
            If Not myRange Is Nothing Then
                If Target.Row = 18 Then .Cells(myRange.Row, 6).Value = _
                    .Cells(myRange.Row, 6).Value - Target.Value _
                    Else .Cells(myRange.Row, 6).Value = _
                    .Cells(myRange.Row, 6).Value + Target.Value
            End If
    .Range("D4,E18,E20").Select
End Sub

danke Annette
Top
#6
Hallo Annette,

sorry, der restliche Code müsste natürlich angepasst werden. Es gibt ja jetzt kein Target mehr. 
Du prüfst ob in den entsprechenden Zellen ein Wert eingetragen ist. 
Ich bin jetzt aber auf dem Sprung. Wenn Du magst, lade doch bitte eine Beispieldatei hoch und
ich schaue mir das später an. Ich arbeite lieber in den Dateien der Fragesteller. 
Das sollte aber kein Hexenwerk sein, einen funktionierenden Code zu erstellen:32:.

Gruß
Ich
Top
#7
Danke

lade Probedatei hoch

PW immer 0000


danke Annette
Top
#8
Wie kann ich Probe atei hochladen ?

Annette
Top
#9
Dies Mal klappt es, ANlage ist fda

danke
Annette


Angehängte Dateien
.xlsm   Materialbedsarf.xlsm (Größe: 57,39 KB / Downloads: 10)
Top
#10
Hi Anette,

schau hier: http://www.clever-excel-forum.de/thread-326.html
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Top


Gehe zu:


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