Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
968to972
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
968to972
968to972
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Lagerbestände aktualisieren

Lagerbestände aktualisieren
12.04.2008 13:03:53
Gerhard
Hallo Leute
Ich versuche gerade ein Bestell Liste mit einer Lagerliste zu verknüpfen.
Zur Bestellliste
In Spalte 10 steht ne Artikelrelevante Nummer, (allerdings nicht in jeder)
In Spalte 12 die zu bestellende Menge
Und in Spalte 36 Ob Ware geliefert ist (über eine Formel =WENN(AK2>1;"JA";WENN(BN2>AH2;"ÜBERFÄLLIG!";"")) erfolgt hier diese Info: Wenn Geliefert Ja, wenn nicht, nix und wenn Liefertermin überschritten Überfällig.)
Zur Lagerliste
In Spalte 10 wieder die artikelrelevante Nummer
In Spalte 12 Der IST Bestand.
Jetzt habe ich folgendes versucht und bin kläglich gescheitert.
Wenn ich in der Bestellliste einen Artikel als geliefert buche (Spalte 36 geht auf JA) dann soll folgendes geschehen.:
Schau in Spalte 10 ob artikelrelevante Nummer vorhanden. Wenn Nein, Ende, Wenn ja, kopiere die gelieferte Stückzahl aus Spalte 12 in den Zwischenspeicher, öffne Lagerliste, suche hier in Spalte 10 die gleiche Artikelrelevante Nummer wie in der Bestellliste und trage die zwischengespeicherte Stückzahl PLUS die schon vorhandene Stückzahl in der Lagerliste in Spalte 12 ein. Öffne MSG Box „Lagerbestand wurde aktualisiert Speichern Ja, Nein“ Schliessen.
Kann mir hierbei jemand helfen?
Gruss Gerhard

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Lagerbestände aktualisieren
12.04.2008 14:32:39
Tino
Hallo,
gibt es dies auch als Beispieldatei, wo die Funktionsfähigen Formeln eingebaut sind?
Auch die Lagerliste als Beispiel wäre nicht schlecht.
Zwei Dateien mit Zip, dann bleiben auch die Datei Namen erhalten.
Gruß
Tino

AW: Lagerbestände aktualisieren
13.04.2008 21:48:00
fcs
Hallo Gerhard,
hier mein Lösungsvorschlag.
Die Werte der Konstanten für Verzeichnis, Datei- und Tabellennamen der Lagerliste muss du noch anpassen.
Im VBA-Editor muss du das Makro in der Datei mit der Bestellliste unter der Tabelle einfügen, in der die Bestelldaten eingegeben werden.
Gruß
Franz

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim wbBestellung As Workbook, wbLager As Workbook
Dim wksBestellung As Worksheet, wksLager As Worksheet
Dim dblBestellmenge As Double
Dim varArtikelNr As Variant
Dim rngZelle As Range
Const strTabLagerliste As String = "Tab1" 'Name der Tabelle mit der Lagerliste
Const strDateiLagerliste As String = "Lagerbestand.xls" 'Name der Lagerlisten-Arbeitsmappe
Const strPfadLagerliste As String = "C:\Test" 'Verzeichnis der Lagerlisten-Arbeitsmappe
'In Bestelliste Änderungen in Spalte AK (37) ab Zeile 2 überwachen.
If Target.Column = 37 And Target.Row >= 2 And Target.Cells.Count Then
'Datenübertragung ausführen, wenn Eintrag auf >1 geändert wird
If Target.Value > 1 Then
'Prüfen, ob in Spalte 10 eine Artikelnummer eingetragen ist
If Not IsEmpty(Me.Cells(Target.Row, 10)) Then
Set wbBestellung = ThisWorkbook
Set wksBestellung = Me 'Diese Tabelle mit Bestellliste
'Prüfen, ob Arbeitsmappe mit Lagerliste bereits geöffnet
For Each wbLager In Workbooks
If LCase(wbLager.Name) = LCase(strDateiLagerliste) Then
Exit For
End If
Next
'ggf. Lagerliste öffnen
If wbLager Is Nothing Then
Set wbLager = Workbooks.Open(FileName:=strPfadLagerliste & "\" & strDateiLagerliste)
End If
Set wksLager = wbLager.Worksheets(strTabLagerliste) 'Tabelle mit Lagerliste
'Bestellmenge und Artikelnummer merken
dblBestellmenge = wksBestellung.Cells(Target.Row, 12).Value
varArtikelNr = wksBestellung.Cells(Target.Row, 10).Value
With wksLager
'Artikelnummer in Lagerliste Spalte 10 suchen
Set rngZelle = .Columns(10).Find(What:=varArtikelNr, LookIn:=xlValues, lookat:= _
xlWhole)
If rngZelle Is Nothing Then
If MsgBox("Artikel-Nummer """ & varArtikelNr & _
""" ist in Lagerliste nicht vorhanden!" & vbLf & vbLf _
& "Lagerliste schliessen?", vbInformation + vbYesNo, _
"Bestellung in Lagerbestand übertragen") = vbYes Then
wbLager.Close savechanges = False
End If
Else
'Bestellmenge im Lagerbestand addieren
.Cells(rngZelle.Row, 12).Value = .Cells(rngZelle.Row, 12).Value + dblBestellmenge
If MsgBox("Lagerliste wurde aktualisert! " & vbLf & vbLf _
& "Speichern?", vbQuestion + vbYesNo, _
"Bestellung in Lagerbestand übertragen") = vbYes Then
wbLager.Save
wbLager.Close
Else
wbLager.Close savechanges = False
End If
wbBestellung.Activate
End If
End With
End If
End If
Set wbBestellung = Nothing: Set wbLager = Nothing
Set wksBestellung = Nothing: Set wksLager = Nothing: Set rngZelle = Nothing
End If
End Sub


Anzeige
AW: Lagerbestände aktualisieren
14.04.2008 09:09:00
Gerhard
Guten Morgen...
Also ich habe mal 2 Beispieldateien mit geänderten Daten mitangefügt. Blattschutz lautet 12345
Bestelliste:
https://www.herber.de/bbs/user/51516.xls
Bestandsliste:
https://www.herber.de/bbs/user/51517.xls
Danke fcs, deine Version habe ich ausprobiert, bekam jedoch bei SaveChanges eine Fehlermeldung, das Variable nicht deklariert sei. Ging ich hier richtig in der Annahme das ich es als Boolean deklarieren muss?
Funktioniert hätte es... Allerdings was mich ein wenig "stört" ist das er mir ned die Zeile anzeigt in der er aktualisiert. Jetzt ned das ich der Programiererei ned traue, aber ich fühle mich sicherer wenn ich zumindest die Artikelnummer oder den Artikel sehe.
Was ich mir gedacht habe ist folgendes.
Wenn Geliefert auf Ja geht, überprüfe ob, Systemnummer vergeben, wenn Nein, beenden. Wenn ja, öffne Lagerbestandsliste,
Suche in Spalte L (12) Systemnummer, setze den Autofilter, starte nun UF Artikel Zubuchen (Lagerbestandsliste) und trage in TextBox18 die gelieferte Menge aus Spalte L (Bestellliste) ein.
Das würde ich ja fast alleine hinbekommen, wo es bei mir hapert, eine "Funktion" zu schreiben , bei der überprüft wird, ob Systemnummer eingetragen ist oder nicht.
Ich hoffe ich habe es verständlich geschrieben, was ich will
Gruß Gerhard.

Anzeige
AW: Lagerbestände aktualisieren
14.04.2008 11:48:58
fcs
Hallo Gerhard,
in den Zeilen
wbLager.Close Savechanges = False
hatte ich einen Doppelpunkt vergessen. Die korrekte Syntax ist
wbLager.Close Savechanges:=False
Savechanges ist ein Parameter der Close-Methode.
Bei dem Arbeiten mit deinen beiden Beispieldateien gab es bei mir auch noch Probleme mit der Suchfunktion. Da du die Spalten für die System-Nr. (b-Nummer) mit einem benutzerdefinierten Format versehen hast, musste ich die Text-Eigenschaft der Zelle statt der Value-Eigenschaft als Suchwert verwenden.
Auch die Spaltennummern (für b-Nummer (=System-Nr) und Ist-Bestand) in der Lagerliste musste ich im Makro anpassen.
Die Übergabe der Werte an das Userform in der Bestands-Datei ist etwas komplexer. Das krieg ich auf die Schnelle nicht gebacken. Diese Informationen lassen sich ggf. einfacher in der Messagebox mit anzeigen.
Gruß
Franz

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim wbBestellung As Workbook, wbLager As Workbook
Dim wksBestellung As Worksheet, wksLager As Worksheet
Dim dblBestellmenge As Double
Dim strEinheit As String
Dim varArtikelNr As Variant
Dim rngZelle As Range
Const strTabLagerliste As String = "LAGERLISTE" 'Name der Tabelle mit der Lagerliste
Const strDateiLagerliste As String = "BESTANDSLISTE.xls" 'Name der Lagerlisten-Arbeitsmappe
Const strPfadLagerliste As String = "C:\" 'Verzeichnis der Lagerlisten-Arbeitsmappe
'In Bestelliste Änderungen in Spalte AK (37) ab Zeile 2 überwachen.
If Target.Column = 37 And Target.Row >= 2 And Target.Cells.Count Then
'Datenübertragung ausführen, wenn Eintrag auf >1 geändert wird
If Target.Value > 1 Then
'Prüfen, ob in Spalte 10 eine Artikelnummer/SystemNr eingetragen ist
If Not IsEmpty(Me.Cells(Target.Row, 10)) Then
Set wbBestellung = ThisWorkbook
Set wksBestellung = Me 'Diese Tabelle mit Bestellliste
'Prüfen, ob Arbeitsmappe mit Lagerliste bereits geöffnet
For Each wbLager In Workbooks
If LCase(wbLager.Name) = LCase(strDateiLagerliste) Then
Exit For
End If
Next
'ggf. Lagerliste öffnen
If wbLager Is Nothing Then
Set wbLager = Workbooks.Open(Filename:=strPfadLagerliste & "\" & strDateiLagerliste)
End If
Set wksLager = wbLager.Worksheets(strTabLagerliste) 'Tabelle mit Lagerliste
'Bestellmenge und Artikelnummer (System-Nummer, b-nummer) merken
dblBestellmenge = wksBestellung.Cells(Target.Row, 12).Value
strEinheit = wksBestellung.Cells(Target.Row, 13).Value
varArtikelNr = wksBestellung.Cells(Target.Row, 10).Text
With wksLager
'Artikelnummer (b-Nummer) in Lagerliste Spalte 12 suchen
Set rngZelle = .Columns(12).Find(What:=varArtikelNr, LookIn:=xlValues, _
lookat:=xlWhole)
If rngZelle Is Nothing Then
If MsgBox("Artikel-Nummer """ & varArtikelNr & _
""" ist in Lagerliste nicht vorhanden!" & vbLf & vbLf _
& "Lagerliste schliessen?", vbInformation + vbYesNo, _
"Bestellung in Lagerbestand übertragen") = vbYes Then
wbLager.Close Savechanges:=False
End If
Else
'Zelle mit neuem Wert im Lagerbestand selektieren
wbLager.Activate
rngZelle.Offset(0, 4).Select
'Bestellmenge (Spalte 16 im Lagerbestand addieren
.Cells(rngZelle.Row, 16).Value = .Cells(rngZelle.Row, 16).Value + dblBestellmenge
If MsgBox("Lagerliste wurde aktualisert! " & vbLf & vbLf _
& "gelieferte Menge: " & dblBestellmenge & " " & strEinheit & vbLf & vbLf _
& "Speichern?", vbQuestion + vbYesNo, _
"Bestellung in Lagerbestand übertragen") = vbYes Then
wbLager.Save
wbLager.Close
Else
wbLager.Close Savechanges:=False
End If
wbBestellung.Activate
End If
End With
Else
MsgBox "Es ist keine System-Nummer in Spalte J eingetragen!" & vbLf & vbLf _
& "LFS-Datum wird wieder gelöscht!"
Target.ClearContents
End If
End If
Set wbBestellung = Nothing: Set wbLager = Nothing
Set wksBestellung = Nothing: Set wksLager = Nothing: Set rngZelle = Nothing
End If
End Sub


Anzeige
AW: Lagerbestände aktualisieren
14.04.2008 12:09:00
Gerhard
Wow... Genial... ich bin begeistert... Danke dir funzt einwandfrei!!!
Und wen wir das ganze über den Autofilter lösen würden? So das ich die Zeile der Bestandsliste sehe, die abgeändert wird? Wäre das nicht einfacher als es über n UF zu machen? Würde als "Information" vollkommen ausreichen.
LG Gegga

AW: Lagerbestände aktualisieren
14.04.2008 15:19:00
fcs
Hallo Gerhard,
um die Autofilterfunktion zur Anzeige der gefunden Systemnummer zu nutzen muss du den folgenden Teil des Makros anpassen.
Gruß
Franz

Else
Application.ScreenUpdating = False
wbLager.Activate
.Activate
'Autofilter setzen auf System-Nr (b-Nummer)
If .AutoFilterMode = True Then
If .Rows.Count - .Cells.SpecialCells(xlCellTypeVisible).EntireRow.Count > 0 Then
.ShowAllData 'Alle Datenzeilen anzeigen
End If
End If
Selection.AutoFilter Field:=12, Criteria1:=varArtikelNr
'Zelle mit neuem Wert im Lagerbestand selektieren
rngZelle.Offset(0, 4).Select
'Bestellmenge (Spalte 16 im Lagerbestand addieren
.Cells(rngZelle.Row, 16).Value = .Cells(rngZelle.Row, 16).Value + dblBestellmenge
Application.ScreenUpdating = True
If MsgBox("Lagerliste wurde aktualisert! " & vbLf & vbLf _
& "gelieferte Menge: " & dblBestellmenge & " " & strEinheit & vbLf & vbLf _
& "Speichern?", vbQuestion + vbYesNo, _
"Bestellung in Lagerbestand übertragen") = vbYes Then
Application.ScreenUpdating = False
.ShowAllData 'Autofilter alle Datenzeilen wieder anzeigen
wbLager.Save
wbLager.Close
Else
wbLager.Close Savechanges:=False
End If
Application.ScreenUpdating = True
wbBestellung.Activate
End If


Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige