Permanente Inventur mit Excel 2003

  • #1
B

batze

Mitglied
Themenersteller
Dabei seit
19.10.2004
Beiträge
11
Reaktionspunkte
0
Hallo,

vielleicht könnt Ihr mir mal wieder bei einem Problem helfen.
Ich habe eine Excel Datei welche in Spalten nach Artikel-Nr., Artikel Bezeichnung, VendePart-Nr., UPC, Stückzahl zum Inventurdatum, derzeitiger Bestand usw. eingeteilt ist.
Nun meine Frage ...
Wie kann ich es realisieren, dass durch abscannen des UPC-Codes auf dem Artikel (wird in eine extra Zelle eingescannt) automatisch mein zum UPC-Code gehörender Bestand um 1 reduziert wird???
... Es soll also die Spalte mit dem UPC-Code durchsucht werden und bei Übereinstimmung die Spalte Bestand in der dazugehörenden Zeile um 1 reduziert werden.
Meine bisherige Formel (in einer weiteren Spalte (Spalte J = Restbestand))
=WENN($D$2=$F:$F;SVERWEIS($D$2;$F:$I;4)-1;$I7)
schafft das zwar, aber logischer Weise eben nur 1x, da sie immer von
der Spalte I (= Bestand zum Inventurstichtag) ausgeht. Ändere ich die Formel, so dass von der Spalte Restbestand abgezogen wird erhalte ich die Fehlermeldung Zirkelbezug.
Wie kann ich dieses Problem lösen???
 
  • #2
Hi batze,

du könntest mit einem Makro die besagte Zelle überwachen.
Wenn dann ein UPC-Code in der Zelle steht, könnte der Makro die notwendigen Berechnungen durchführen und die besagte Zelle anschliessend leeren, so daß der nächste Code eingegeben werden kann.

Gruß Matjes :)
 
  • #3
oh, ah, hi ...
es geht also irgendwie??? :)

Danke Matjes,

ich weiß zwar wie man Makros aufzeichnet und in Symbolleisten unterbringen kann, aber könntest Du mir bitte noch ein bisschen weiter helfen? Ich will ja nicht verlangen, dass Du mir jetzt einen Code oder so schreibst, aber irgendwie brauche ich leider noch weitere Hilfe, denn ich weiß eigentlich jetzt nur, dass es funktionieren müsste.
... aber wie genau???

Thank`s
 
  • #4
Hi batze,

schick mir die Datei (oder falls geheim eine Beispieldatei) mit einer kleinen Beschreibung per mail. Dann werde ich dir ein kleines Beispiel erstellen.

Beschreibung sollte enthalten:
a) Wie erkenne ich, dass der UPC-Code gültig ist.
b) Was soll passieren, wenn ein ungültiger UPC-Code eingegeben wurde.
c) Was soll passieren, wenn ein gültiger UPC-Code eingegeben wurde.

Gruß Matjes :)
 
  • #5
Dafür hätte ich was.
Zuvor aber: was heißt in eine extra Zelle eingescannt. Heißt das, daß das Scan-Ergebnis immer in Zelle A1 (beispielsweise) reinkopiert wird und von hier aus die Spalte D durchsucht wird?

Mit einer Hilfsspalte kannst du per Makro aktueller Bestand minus Scan-Menge per Formel ausrechnen, dann den Wert des aktuellen Bestands überschreiben und die Scanmenge wieder auf Null setzen.

Also:
Spalte A Spalte B Spalte C Spalte D
= Bestand = Scan-Menge = Übertrag der Scan-Menge = Formel =A2-B2
25 1 =A3-B3

Wenn jetzt in B3 eine 1 reingeschrieben wird, geht das Makro los.
Im Code des Tabellenblatte muß folgendes stehen.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
       ->Target ist die definierte Zielspalte für den Eintrag der Scan-Menge
  If Target.Column = 2 Then  ->wenn in Spalte 2 (B) was reingeschrieben wird
        Target.Copy->kopiere was gerade reingeschrieben wurde
        Target.Offset(0, 1).Select->gehe Null runter und 1 nach rechts
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False->füge den Wert ein
        Target.Offset(0, 2).Select->gehe Null runter und 2 nach rechts
        Selection.Copy->kopiere das
        Target.Offset(0, -1).Select->gehe Null runter und 1 nach links (also in den aktuellen Bestand)
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False->füge den Wert ein
                               ->(also ohne die Formel mitzunehmen wie bei Strg+C und Strg+V)
        Target.Offset(0, 1).Select->gehe Null runter und 1 nach rechts
     Selection.Clear->Hilfsspalte C wieder leeren
  End If
End Sub

Oder so... ;D
 
  • #6
Hallo Matjes, hallo Klexy,

vielen herzlichen Dank, für Eure professionelle Hilfe!!!
In diesem Forum lauern anscheinend einige Genies!?!?
Echt super von Euch! Macht weiter so!

Übrigens: Natürlich konnte mein 2. Problem mit dem ich mich an dieses Forum wandte innerhalb kürzester Zeit von Euch professionell gelöst werden. Besonderer Dank speziell an Matjes, der mir einen VBA-Code direkt in meine Excel-Tabelle schrieb!

Thank´s
 
  • #7
Hi zusammen,

hier nochmal der Code zum nachlesen.

Die Zelle D2 und D3 werden auf Änderung überwacht.
Eingabe in D2 stellt einen Ausgang dar.
Eingabe in D3 stellt einen Eingang dar.

Gruß Matjes :)

Code:
Option Explicit

'Zelle Eingabe Ausgang UPC-Nr. (D2)
Const c_rowUPCout = 2->Zeile  UPC-Code Ausgang
Const c_colUPCout = 4->Spalte UPC-Code Ausgang
'Zelle Meldungs-Ausgabe Ausgang UPC-Nr. (G2)
Const c_rowUPCout_meld = 2->Zeile  UPC-Code Ausgang Meldung
Const c_colUPCout_meld = 7->Spalte UPC-Code Ausgang Meldung

'Zelle Eingabe Eingang UPC-Nr. (D3)
Const c_rowUPCin = 3     ->Zeile  UPC-Code Eingang
Const c_colUPCin = 4     ->Spalte UPC-Code Eingang
'Zelle Meldungs-Ausgabe Eingang UPC-Nr. (G3)
Const c_rowUPCin_meld = 3->Zeile  UPC-Code Eingang Meldung
Const c_colUPCin_meld = 7->Spalte UPC-Code Eingang Meldung

'Spalten der Tabelle
Const c_col_vendornbr = 1
Const c_col_vendorname = c_col_vendornbr + 1
Const c_col_Lagerplatz = c_col_vendorname + 1
Const c_col_Productdescr = c_col_Lagerplatz + 1
Const c_col_skuNr = c_col_Productdescr + 1
Const c_col_UPCNr = c_col_skuNr + 1
Const c_col_VendorNr = c_col_UPCNr + 1
Const c_col_palletqty = c_col_VendorNr + 1
Const c_col_BOHQty = c_col_palletqty + 1
Const c_col_NeuerBestand = c_col_BOHQty + 1

Const c_col_lastColumn = c_col_NeuerBestand

'erste Zeile mit Werten
Const c_row_FirstValue = 8

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
 
 ->eine Zelle geändert
  If Target.Count = 1 Then
  
 ->*** Eingabe Ausgang ?
    If Target.Column = c_colUPCout And Target.Row = c_rowUPCout Then
      If Cells(c_rowUPCout, c_colUPCout).Value <>  Then
        Application.EnableEvents = False->Ereignisse ausschalten
        Call Ausgang_UPC(Cells(c_rowUPCout, c_colUPCout).Value)
        Application.EnableEvents = True->Ereignisse einschalten
      End If
 ->*** Eingabe Eingang ?
    ElseIf Target.Column = c_colUPCin And Target.Row = c_rowUPCin Then
      If Cells(c_rowUPCin, c_colUPCin).Value <>  Then
        Application.EnableEvents = False->Ereignisse ausschalten
        Call Eingang_UPC(Cells(c_rowUPCin, c_colUPCin).Value)
        Application.EnableEvents = True->Ereignisse einschalten
      End If
    End If
  End If
End Sub
Private Sub Ausgang_UPC(UPCNr As Double)

  Dim l_Anz_row As Long, Zelle As Range
  
 ->in c_col_UPCNr UPC-Nr suchen
  l_Anz_row = Cells(Rows.Count, c_col_UPCNr).End(xlUp).Row
  Set Zelle = ActiveSheet.Range(Cells(c_row_FirstValue, c_col_UPCNr), _
              Cells(l_Anz_row, c_col_UPCNr)).Find(UPCNr, _
              LookIn:=xlValues, LookAt:=xlWhole)
  
  If Zelle Is Nothing Then
   ->nicht gefunden -> Meldung not found
    Cells(c_rowUPCout_meld, c_colUPCout_meld).Value = UPCNr &  not found
  Else
   ->gefunden :-)
   ->Ausgang vom Bestand abziehen
    Cells(Zelle.Row, c_col_NeuerBestand).Value = _
      Cells(Zelle.Row, c_col_NeuerBestand).Value - 1
      
   ->UPC-Nr. als letzte bearbeitete eintragen
    If Cells(Zelle.Row, c_col_NeuerBestand).Value > 0 Then
      Cells(c_rowUPCout_meld, c_colUPCout_meld).Value = UPCNr
    ElseIf Cells(Zelle.Row, c_col_NeuerBestand).Value = 0 Then
      Cells(c_rowUPCout_meld, c_colUPCout_meld).Value = _
        UPCNr &  counter equal 0
    ElseIf Cells(Zelle.Row, c_col_NeuerBestand).Value < 0 Then
      Cells(c_rowUPCout_meld, c_colUPCout_meld).Value = _
        UPCNr &  counter less 0
    End If
    Set Zelle = Nothing
  End If
 ->Eingabezelle löschen
  Cells(c_rowUPCout, c_colUPCout).Value = 
End Sub
Private Sub Eingang_UPC(UPCNr As Double)

  Dim l_Anz_row As Long, Zelle As Range, i As Long
  
 ->in c_col_UPCNr UPC-Nr suchen
  l_Anz_row = Cells(Rows.Count, c_col_UPCNr).End(xlUp).Row
  Set Zelle = ActiveSheet.Range(Cells(c_row_FirstValue, c_col_UPCNr), _
              Cells(l_Anz_row, c_col_UPCNr)).Find(UPCNr, _
              LookIn:=xlValues, LookAt:=xlWhole)
  
  If Zelle Is Nothing Then
   ->nicht gefunden -> Meldung->new value'
    Cells(c_rowUPCin_meld, c_colUPCin_meld).Value = UPCNr &  new value
   ->erste Wertezeile duplizieren
    Rows(c_row_FirstValue).Copy
    Rows(c_row_FirstValue).Insert Shift:=xlDown
   ->Werte löschen
    For i = 1 To c_col_lastColumn
      Cells(c_row_FirstValue, i).Value = 
    Next
   ->UPC-Nr in neue Zeile eintragen
    Cells(c_row_FirstValue, c_col_UPCNr).Value = UPCNr
   ->Bestand auf 1
    Cells(c_row_FirstValue, c_col_NeuerBestand).Value = 1
  Else
   ->gefunden :-)
   ->Eingang zum Bestand hinzuzählen
    Cells(Zelle.Row, c_col_NeuerBestand).Value = _
      Cells(Zelle.Row, c_col_NeuerBestand).Value + 1
   ->UPC-Nr. als letzte bearbeitete eintragen
    Cells(c_rowUPCin_meld, c_colUPCin_meld).Value = UPCNr
    Set Zelle = Nothing
  End If
 ->Eingabezelle löschen
  Cells(c_rowUPCin, c_colUPCin).Value = 
End Sub
 
Thema:

Permanente Inventur mit Excel 2003

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben