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