Office: (Office 2013) Bestandsführung (Wareneingang/Warenausgang umbuchen)

Helfe beim Thema Bestandsführung (Wareneingang/Warenausgang umbuchen) in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Schönen guten Tag! Ich würde gerne eine (relativ) simple Bestandsführungsdatei mit 2 Tabellenblättern (Wareneingang + Warenausgang) erstellen, in... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Nina97, 9. Januar 2016.

  1. Nina97 Erfahrener User

    Bestandsführung (Wareneingang/Warenausgang umbuchen)


    Schönen guten Tag!

    Ich würde gerne eine (relativ) simple Bestandsführungsdatei mit 2 Tabellenblättern (Wareneingang + Warenausgang) erstellen, in der die Möglichkeit gegeben ist, Artikel, die manuell eingetragen werden, über eine Schaltfläche zwischen diesen umzubuchen oder auch zu entfernen. Dazu habe ich erst einmal 3 Varianten erstellt und habe diese dem Anhang beigefügt.

    WIP_ALT1 finde ich optisch am schönsten, aber WIP_ALT2 wäre, wenn funktionsfähig wohl am besten :p
    Also ist WIP_ALT2 für mich eigentlich die Wunschdatei.

    Ich hatte es mir folgendermaßen vorgestellt:

    Der Barcode wird in der Wareneingangsliste eingetragen, das aktuelle Datum automatisch hinzugefügt, Hersteller und Art.-Bezeichnung werden eingetippt und Warengruppenliste + Aktionsliste als DropDownMenü erstellt. Soweit habe ich es auch überraschenderweise schon geschafft. :p

    Das Herzstück übersteigt aber leider meine Fähigkeiten bei weitem.

    Wenn man nun den Button "Aktion" (bzw. "Umbuchen"/"Entfernen") betätigt, sollen Spalte(n) A,B,C,D,E + G (bzw. I) der jeweiligen Zeile(n) bereinigt werden oder wenn man von Wareneingang zu Warenausgang umbuchen möchte, Spalten A-E in den Warenausgang verschoben werden, wo zusätzlich noch das aktuelle Datum des Warenausgangs erstellt wird.

    Ich hoffe das ganze ist nicht zu komplex und würde mich über Hilfe, bzw. (Alternativ-)Vorschläge freuen :)

    Liebe Grüße.
     
    Nina97, 9. Januar 2016
    #1
  2. Nina97 Erfahrener User
    Ich habe jetzt schon einmal tollen Code für die beiden Buttons (in WIP_ALT2), falls die Artikel die Aktion "Position entfernen" zugewiesen bekommen:

    Code:
    Private Sub WEWA_button_Click()
    
    Dim i As Integer
    Dim lngLR As Long
    
    i = 2500
    Do
        If Sheets("Wareneingang").Range("G" & i).Text = "Position entfernen" Then
                Sheets("Wareneingang").Rows(i).ClearContents
                Sheets("Wareneingang").Rows(i).Validation.Delete
                
                
            With Sheets("Wareneingang")
            lngLR = .Cells(.Rows.Count, 1).End(xlUp).Row
            .Cells(4, 1).Resize(lngLR - 1, 8).Sort _
                Key1:=.Range("B4"), Order1:=xlAscending, _
                Header:=xlNo, OrderCustom:=1, _
                MatchCase:=False, Orientation:=xlTopToBottom, _
                DataOption1:=xlSortNormal
            End With
                
        End If
    i = i - 1
    Loop Until i = 0
    vbResult = MsgBox("Einträge wurden entfernt!", vbOKOnly)
    End Sub
    
    

    Scheint zumindest augenscheinlich wunderbar zu klappen :)


    Edit: Ok, die DropDownMenüs werden leider noch nicht mitsortiert und bleiben an ihrem ursprünglichen Platz "kleben".
     
    Zuletzt bearbeitet: 9. Januar 2016
    Nina97, 9. Januar 2016
    #2
  3. Beverly
    Beverly Erfahrener User
    Hi Nina,

    Frage: wenn "Position entfernen" ausgewählt ist - was soll dann passieren? Soll die Zeile insgesamt gelöscht werden oder nur die Zellinhalte geleert?

    Generell: ich würde nur den Schalter verwenden, um die Aktionen in Spalte G bzw. H auszuführen, nicht jedoch das Change-Ereignis für diese Spalte beim Ändern durch das Gültigkeits-DropDown. Es gibt so schon Probleme, weil das Löschen (bzw. Übertragen) immer das Change-Ereignis im Tabellenblatt auslöst - das muss man abfangen, damit keine Endlosschleife ausgelöst wird und wenn man dann noch das Change-Ereignis für die Spalte G bzw. H berücksichtigen müsste, würde das noch wesentlich komplizierter. Das ist meine persönliche Meinung.

    Bis später,
    Karin
     
    Beverly, 9. Januar 2016
    #3
  4. Nina97 Erfahrener User

    Bestandsführung (Wareneingang/Warenausgang umbuchen)

    Hey :)

    Ich hatte erst Sheets("Wareneingang").Rows(i).delete verwendet - wobei ja auch die Validation-Zellen mitgelöscht werden und die Tabelle wunderbar zusammenrückt, ohne dass Leerzeilen bleiben - und mich gefreut, bis ich dann gesehen habe, dass auch die farblichen Formatierungen (F, G und H) mit entfernt werden. (Dabei schrumpft dann die optische Tabelle ja von unten her immer mehr zusammen).

    Deshalb habe ich dann versucht es über .clearContents und .Validation.Delete zu regeln und dann noch den Code zum sortieren gegooglet. Dabei bleiben aber ja leider, wie gesagt, die Validation-Felder nicht bei ihren zugehörigen Zeilen. Zu dem Thema habe ich nur ganz, ganz wenig gefunden.

    Also im Idealfall würde die ganze Zeile gelöscht werden, aber die farblichen Formatierungen immer bis z.B. Zeile 2500 gehen, aber, wenn es so problematisch ist, würde ich dann auch notfalls auf das Optische verzichten und wieder Variante A nutzen :P

    Also ich habe deinen Text jetzt oft durchgelesen, aber das ist ganz schwer zu verstehen für mich Bestandsführung (Wareneingang/Warenausgang umbuchen) :(

    Meinst du damit vielleicht, dass ich das Worksheet_Change löschen soll und mehr mit Formeln in den Zellen arbeiten?
    Oh, ich komm mir echt blöd vor.


    Liebe Grüße und danke für deine Geduld.
     
    Nina97, 9. Januar 2016
    #4
  5. Nina97 Erfahrener User
    Hallo nochmal zu später Stunde :p

    Ich wollte vor dem Schlafengehen nochmal eben den aktuellen Stand vorzeigen.

    Ich hab's jetzt endlich hinbekommen, den Umbuchungsvorgang (zumindest schonmal von WE zu WA) zu realisieren.

    So funktioniert alles augenscheinlich erstmal ganz toll, wie ich finde :p

    Meinst du, die Datei und der Code halten 2500 bis 3000 Einträgen stand? Das sieht bestimmt schrecklich aus im VBA-Editor für das geschulte Auge.

    Hier ist noch meine ToDoListe:


    Ganz liebe Grüße und eine gute Nacht :)
     
    Zuletzt bearbeitet: 10. Januar 2016
  6. Beverly
    Beverly Erfahrener User
    Hi Nina,

    ich habe mal den Code für den Schalter angepasst und das Change-Ereignis für die Tabelle "Wareneingang" etwas bereinigt (Select braucht man nicht) - schau mal, ob alles deinen Vorstellungen entspricht. Das Löschen bzw. Übertragen wird nur durch den Schalter ausgelöst, nicht durch das Change-Ereignis beim Ändern der Gültigkeitszellen in Spalte G.

    Beim Löschen von Zeilen wird unter der letzten belegten Zeile dieselbe Anzahl an Zeilen wieder eingefügt - dabei werden die Formatierungen automatisch mit übernommen, sodass der formatierte Bereich immer gleich groß bleibt.

    Die Formeln in Spalte B habe ich gelöscht (ebenso die in Warenausgang in Spalte F) - sie sind nicht notwendig, da das Datum doch automatisch durch den Code eingetragen wird.

    Bis später,
    Karin
     
    Beverly, 10. Januar 2016
    #6
  7. Nina97 Erfahrener User
    Hallo Karin! :)

    Ein riesiges Dankeschön für deine Arbeit, das ist wirklich supercool! :)

    Der Code sieht jetzt viel sauberer aus :p Und auch Danke für die Kommentarzeilen!

    Ich habe noch eingefügt, dass sich Spalte G bei Abfrageantwort-Nein auf "Keine" setzt.

    Was mir jetzt zuerst aufgefallen ist, ist, dass die DropDownMenüs in Spalte E und G bei Aktion "Warenausgang buchen" und "Position entfernen" nicht aus den entsprechenden Zeilen mitgelöscht werden.

    Und, wenn man sämtliche Positionen im Wareneingang entfernt oder umbucht (was normalerweise ja selten bis nie vorkommt), dann wird wohl Zeile 3 verwendet, um die gelöschten Zeilen zu ersetzen und es entsteht ein optisches Durcheinander. :p

    Gäbe es eigentlich eine Alternative für .select, um nach Eingabe in Spalte A direkt in Spalte C zu springen - in Spalte B findet ja die automatische Datumserstellung statt - oder könnte man für so eine Kleinigkeit, dann doch .select nutzen? Ich finde das cool, wenn man direkt in der Spalte landet, die als nächstes relevant für die Eingabe ist. Aber muss natürlich auch nicht unbedingt sein :D

    Ich versuch jetzt erstmal wieder mein Bestes, um vorwärts zu kommen :)

    Nochmals vielen Dank und liebe Grüße!
     
  8. Nina97 Erfahrener User

    Bestandsführung (Wareneingang/Warenausgang umbuchen)

    Hey :)

    Also das Entfernen der DropDownMenüs bekomme ich jetzt so erst einmal nicht hin.
    Hier sind die Dinge, die ich diesbezüglich (einzeln und kombiniert) ausprobiert habe:

    Code:
                        ''DropDowns in relevanter Zeile für E und G löschen (funktioniert einzeln, aber nicht in Kombination)
                        '.Cells(lngZeile, 5).Validation.Delete
                        '.Cells(lngZeile, 7).Validation.Delete
                        ''DropDowns in relevanter Zeile löschen (funktioniert einzeln, aber nicht in Kombination)
                        '.Rows(lngZeile).Validation.Delete
                        ''Verzögerung zwischen .Validation.Delete und .Delete (funktioniert nicht)
                        'Application.Wait (Now + TimeValue("0:00:01"))
                        
                        ''Zellen leeren, anstatt Zeile löschen (funktioniert nicht + Leerzeilen entstehen)
                        '.Cells(lngZeile, 1).ClearContents
                        '.Cells(lngZeile, 2).ClearContents
                        '.Cells(lngZeile, 3).ClearContents
                        '.Cells(lngZeile, 4).ClearContents
                        '.Cells(lngZeile, 5).ClearContents
                        '.Cells(lngZeile, 5).Validation.Delete
                        '.Cells(lngZeile, 7).ClearContents
                        '.Cells(lngZeile, 7).Validation.Delete
    Entweder sind die DropDowns da und die Zeile leer oder umgekehrt :P
    Verstehe ich nicht, dass er sie hier behält, wenn doch die ganze Zeile gelöscht wird, bei der anderen Datei aber nicht.
    Das mit der Verzögerung (wenn ich es überhaupt richtig gemacht habe) hat auch nicht geklappt.

    Dann schaue ich jetzt erstmal, ob ich noch an anderen Stellen weiterkomme :)

    Liebe Grüße.
     
  9. Beverly
    Beverly Erfahrener User
    Hi Nina,

    hier greift leider der Automatismus von Excel (den man in anderen Fällen jedoch häufig gerne sieht), dass beim Einfügen von Zeilen/Zellen das Format der darüberliegenden Zeile/Zelle (und damit die Gültigkeitszellen) auf die direkt unterhalb eingefügten Zellen übernommen wird. Um die Gültigkeitszellen zu löschen habe ich jetzt den Befehl Clear verwendet - damit wird allerdings auch die Zellfarbe entfernt, die danach wieder auf die gewünschte Farbe gesetzt werden muss.

    Das Setzen des Cursors nach Spalte C bei Eingabe in Spalte A setzt voraus, dass man unterscheiden muss, wie das Change-Ereignis ausgelöst wurde: durch Eingabe in Spalte A oder Löschen von Zeilen durch den Schalter-Code - dazu habe ich eine Boolsche Variable (die nur den Zustand Wahr oder Falsch annehmen kann) verwendet. Dieser "Kunstgriff" ist er erforderlich, da das Change-Ereignis auch beim Löschen von Zeilen ausgelöst wird und der Code den Cursor in diesem Fall ebenfalls nach Spalte C versetzen möchte - das würde aber 1. einen Fehler auslösen da Target nicht nur 1 Zelle sondern alle Zellen der neu eingefügten Zeilen umfasst und 2. würde der Code den Cursor (wenn man den Fehler abfängt, was möglich ist) dann nach Spalte C in eine der eingefügten Zeilen setzen, was ja nicht erwünscht ist.

    Bis später,
    Karin
     
    Beverly, 11. Januar 2016
    #9
  10. Nina97 Erfahrener User
    Hallo Karin,

    das ist saustark geworden! :)

    Kommt mir auch so vor, als würde es jetzt generell flüssiger/schneller laufen, als mit dem, was ich da zusammengewürfelt hatte. :p

    Ich werde das jetzt versuchen auf Tabelle "Warenausgang" zu übertragen und mal ein wenig mit Schaltflächen rumprobieren.
    Speichern, Speichern&Beenden und einen Schalter für Wechsel "Warenausgang"/"Wareneingang" habe ich schon hinbekommen. :)

    Dann versuche ich noch ein "Suchen nach"-Feld und eine "Sortieren nach"-Schaltfläche einzufügen.
    Im "Notfall" kann ich ja bestimmt bei ersterem einfach die Standardsuche öffnen lassen und für zweiteres den Code von dir von meiner andere Datei nutzen (Doppelklick auf Spaltenüberschrift).

    Ich bin dir echt super dankbar für deine Hilfe!

    Liebe Grüße. :)
     
  11. Nina97 Erfahrener User
    Hallo, da bin ich wieder :p

    Ich habe das Erscheinungsbild jetzt etwas abgeändert, den Code soweit übernommen und auch für die Tabelle "Warenausgang" angepasst. Das Entfernen und wechselseitige Umbuchen funktioniert auch super, allerdings habe ich ein kleines Problem sobald mehr als nur 1 Position gleichzeitig bearbeitet wird und zwar insofern, dass die Rahmen in Spalte F (Warengruppen) entfernt bleiben/nicht wiederhergestellt werden. Wenn man jeweils nur 1 Position auf einmal bearbeiten lässt, tritt dieser Schönheitsfehler nicht auf.

    Hier ist der verwendete Code:

    Code:
                ' Füllfarbe, Schriftgröße, Rahmeneigenschaften für Spalte F "Warengruppe" beziehen
                With Range(Cells(lngLetzte + 1, 6), Cells(lngLetzte + lngAnzahl, 6))
                    .Font.Size = 14
                    .Borders(xlEdgeLeft).LineStyle = xlContinuous
                    .Borders(xlEdgeRight).LineStyle = xlContinuous
                    .Borders(xlEdgeBottom).LineStyle = xlContinuous
                    .Borders(xlEdgeTop).LineStyle = xlContinuous
                    .Interior.Color = Sheets("Auswahllisten").Range("H2").Interior.Color
                End With
                
                ' Füllfarbe, Schriftgröße, Horizontale Ausrichtung, Rahmeneigenschaften für Spalte H "Aktion" beziehen
                With Range(Cells(lngLetzte + 1, 8), Cells(lngLetzte + lngAnzahl, 8))
                    .Font.Size = 14
                    .HorizontalAlignment = xlCenter
                    .Borders(xlEdgeRight).Weight = xlMedium
                    .Borders(xlEdgeRight).LineStyle = xlContinuous
                    .Interior.Color = Sheets("Auswahllisten").Range("H3").Interior.Color
                End With
                
    	   'Extra-Versuch (ändert am Ergebnis nichts)
                Worksheets("Wareneingang").Cells(lngLetzte, 6).BorderAround _
                    Weight:=xlThin
    
    

    Und dann hätte ich auch noch eine Frage zur Vermeidung von doppelten Einträgen. Und zwar habe ich folgenden Code dazu gefunden:

    Code:
    
        Dim lngLetzte As Long
        Dim rngSuchBereich, Bereich As Range
    
        lngLetzte = IIf(IsEmpty(Sheets("Wareneingang").Range("B3000")), Range("B3000").End(xlUp).Row, 3000)
        Set Bereich = Range("B7:B" & lngLetzte - 1)
    
        Set rngSuchBereich = Bereich.Find(Target.Value, LookIn:=xlValues, LookAt:=xlWhole)
    
          If Not rngSuchBereich Is Nothing Then
            MsgBox "Eingabe nicht möglich, EAN " & Target.Value & " bereits in Zeile " & rngSuchBereich.Row & " vorhanden!"
            Target.ClearContents
            blnNichtLoeschen = True
        End If
    
        Set rngSuchBereich = Nothing
        Set Bereich = Nothing
    
    
    Der funktioniert auch, wie gewünscht, aber wie kann man die Suche noch auf das zweite Tabellenblatt "Warenausgang" (ebenfalls Range B7:3000) ausweiten und die MsgBox noch um die Angabe erweitern, in welcher Tabelle der Eintrag bereits vorhanden ist?

    Anbei habe ich noch die aktuelle Arbeitsmappe.


    Vielen Dank und liebe Grüße. :)
     
  12. Nina97 Erfahrener User
    Hallo nochmals :)

    Hier habe ich noch anderen Code gefunden, mit dem ich auch den Tabellennamen anzeigen lassen kann, allerdings auch erst einmal nur für ein Tabellenblatt:

    Code:
    
        Dim Rng As Range
        Dim cel As Range
        Dim col As Range
        Dim c As Range
        Dim firstAddress As String
    
    
        For Each col In Target.Columns
            Set Rng = Range(Range("B7"), Range("B" & Rows.Count).End(xlUp))
            Debug.Print Rng.Address
    
            For Each cel In col
                If WorksheetFunction.CountIf(Rng, cel.Value) > 1 Then
                    Set c = Rng.Find(What:=cel.Value, LookIn:=xlValues)
                    If Not c Is Nothing Then
                        firstAddress = c.Address
                        Do
                            MsgBox "Eingabe unzulässig" & vbNewLine & vbNewLine _
                                    & "EAN " & Target.Value & " bereits in " & c.Worksheet.Name & "" _
                                    & " Zeile " & c.Row & " vorhanden"
                            'Set c = Rng.FindNext(c)
                            Target.ClearContents
                            Target.Select
                        Loop While Not c Is Nothing And c.Address <> firstAddress
                    End If
                End If
            Next
        Next col
    
    End Sub
    
    
    Ich werde aus dem ganzen Gecode einfach nicht schlau ^^

    Eine gute Nacht! :)
     
  13. Beverly
    Beverly Erfahrener User

    Bestandsführung (Wareneingang/Warenausgang umbuchen)

    Hi,

    im Anhang die Mappe mit den angepassten Codes.

    Beachte bitte folgendes: in deiner Mappe gibt es (im VBA-Editor unter Extras -> Verweise) einen Verweis auf "Microsoft Outlook 16.0 Object Library" - ich weiß nicht, wo der bei dir herkommt, da ich eigentlich keinen relevanten Code oder Objekte gefunden habe. Gleichgültig jedoch, wo der Verweis herkommt - da ich mit Office 2013 arbeite, löst dieser Verweis bei mir einen Fehler aus und ich habe ihn deshalb löschen müssen. Du müsstest ihn also eventuell neu setzen - dazu musst du nach dem Öffnen und aktivieren der Makros zuerst in den VBA-Editor gehen und -> Debuggen -> Komplieren von VBAProjekt ausführen. Falls da eine MsgBox mit dem Hinweis "Fehler beim Kompilieren: Projekt oder Bibliothek nicht gefunden" oder ähnliches angezeigt wird, müsstest du diesen Verweis einfach aus der angezeigten Liste auswählen und aktivieren.

    Bis später,
    Karin
     
    Beverly, 14. Januar 2016
    #13
  14. Nina97 Erfahrener User
    Hallo Karin :)

    Erst einmal vielen Dank für den Hinweis!

    Den Fehler habe ich nämlich heute morgen ebenfalls (auf dem anderen Computer, Excel2010) erhalten - für Outlook 2016 und noch irgendetwas mit CDDB oder ähnliches.

    Da weiß ich allerdings noch weniger als du, wie das wohl zustandegekommen sein mag :p

    Und dann natürlich wieder einmal meinen allergrößten Dank für deine Zeit!

    Die Formatierungswiederherstellung hatte jetzt erst einmal noch nicht ganz reibungslos funktioniert, aber ich habe es nach deinem Muster und mit wahrscheinlich wieder mal mehr Klebeband als notwendig hinbekommen :)

    Die Duplikatsuche mit dazugehöriger MsgBox ist genau so, wie ich es mir vorgestellt hatte, allerdings gibt es jetzt noch ein kleines Problemchen ;)

    Und zwar kann man momentan überhaupt keine Eingabe mehr in der "EAN"-Spalte (B) tätigen, da wohl der Eingabewert selbst bereits schon als Duplikat gewertet wird :)

    Das Ganze habe ich jetzt alles soweit übernommen und die aktuelle Datei mit angehangen.

    Liebe Grüße. :)
     
  15. Beverly
    Beverly Erfahrener User
    Hi Nina,

    ändere diese Zeile

    Code:
    If Application.CountIf(Columns(2), Target) + Application.CountIf(Worksheets("Warenausgang").Columns(2), Target) [COLOR=#0000ff]= 1[/COLOR] Then

    Mache außerdem mal folgendes: lösche alle Rahmen im Bereich B8:F20 und setze sie dann für den kompletten Bereich neu. Kommentiere dann mal deinen ergänzten Code für die Rahmen aus - dann sollte es auch keine Probleme mit der Übernahme der Rahmen geben wenn Zeilen gelöscht und wieder eingefügt werden. Dieses Problem tritt nur auf, wenn nicht der gesamte Bereich sondern nur einzelne Zellen unabhängig voneinander formatiert werden.

    Bis später,
    Karin
     
    Beverly, 14. Januar 2016
    #15
Thema:

Bestandsführung (Wareneingang/Warenausgang umbuchen)

Die Seite wird geladen...
  1. Bestandsführung (Wareneingang/Warenausgang umbuchen) - Similar Threads - Bestandsführung Wareneingang Warenausgang

  2. Bestandsliste mit Suchfunktion

    in Microsoft Excel Hilfe
    Bestandsliste mit Suchfunktion: Hallo, Ich möchte mir für mein Ausrüstungslager eine Exceltabelle erstellen, in der ich einen Suchbegriff eingeben kann (z.B. Schlafsack) und mir dann der Lagerort (z.B. Kiste 1) angezeigt wird....
  3. Bestandsführung (Wareneingang/Warenausgang umbuchen)

    in Microsoft Excel Hilfe
    Bestandsführung (Wareneingang/Warenausgang umbuchen): Bestandsführung Schönen guten Abend! Habe hier im Anhang eine Datei. Leider habe ich zu wenig Ahnung von VBA um diese alleine anzupassen. Meine Frage: Ist es möglich in dieser Datei Spalten zu...
  4. Monatliche Wareneingänge seit 2003

    in Microsoft Access Hilfe
    Monatliche Wareneingänge seit 2003: Hallo, folgendes (mein) Problem: Ich habe zwar einige DB's mit Hilfe von einigen Foren erstellt und auch brauchbare Ergebnisse erzielt, doch hier scheitere ich. Seit Oktober 2003 erfassen wir...
  5. Bestandsliste wareneingang ausgang defekt

    in Microsoft Excel Hilfe
    Bestandsliste wareneingang ausgang defekt: Hallo, ich brauche eine Excel Tabele mit einer Bestandsliste mit einem wareneingang und einem warenausgang und defekt das rechnet excel auch alles richtig immer aus er zieht es ab von der...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden