Hallo liebe Gemeinde,
ich habe mir dieses Video hier angesehen und auch so geschrieben. https://www.youtube.com/watch?v=UnZ-rFhn-gg
Das Problem, um was es bei mir geht, sieht man zum Schluss ab der 1:54:00 !
Zur Info: ich habe vieles durch das Video gelernt bin aber noch kein Meister, eher Anfänger *g*.
Ich habe es, nachdem alles funktioniert hat, etwas verfeinert bzw. wollte ich es anders haben.
Ich habe eine Produktblatt so wie er, bloß bei mir gibt es ein Bestand / Soll und ein Bestand /IST.
Das bedeudet, ich möchte gern, wenn ich einen neuen Artickel einfüge, festlegen, wie viele Produkte immer auf Lager sein sollen.
Das habe ich auch so hinbekommen.
Die Schwierigkeit, die ich jetzt habe, ist das Problem mit dem Buchen von Verkauf und Einkauf.
Den Bestand/ IST zeigt er mir an, er registriert aber nicht, dass, wenn ich etwas kaufe, dies auch bei dem Produkttabellenblatt dort den Bestand/ IST mit verändert werden muss.
Ich habe die Prozedur mal hier rein geschrieben; ich hoffe ihr könnt mir helfen.
Mit freundlichen Grüßen
Tom
Private Sub Label1_Click()
End Sub
Private Sub Label4_Click()
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Call ws_Unprotect("Buchungen_Change")
With ActiveSheet
.Range(.Cells.Find(What:="Produkt-ID", LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 1).Address).Value = _
ListBox1.List(ListBox1.ListIndex, 0)
.Range(.Cells.Find(What:="Produktname", LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 1).Address).Value = _
ListBox1.List(ListBox1.ListIndex, 1)
.Range(.Cells.Find(What:="Bestand/ IST", LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 1).Address).Value = _
ListBox1.List(ListBox1.ListIndex, 2)
End With
Call ws_Protect("Buchungen_Change")
'UserForm schließen
Unload Me
End Sub
Private Sub UserForm_Initialize()
Call ws_Unprotect("Buchungen_Change")
'Tabelle einlesen
Dim tbl As ListObject
Set tbl = ThisWorkbook.Worksheets("Produkte").ListObjects(1)
Dim Zeile As Long
For Zeile = 1 To tbl.DataBodyRange.Rows.Count
ListBox1.AddItem tbl.DataBodyRange(Zeile, 1).Value
ListBox1.List(ListBox1.ListCount - 1, 1) = tbl.DataBodyRange(Zeile, 2).Value
ListBox1.List(ListBox1.ListCount - 1, 2) = tbl.DataBodyRange(Zeile, 4).Value
Next Zeile
Call ws_Protect("Buchungen_Change")
'Erstes Element auswählen
ListBox1.Selected(0) = True
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
With ActiveSheet
.Range(.Cells.Find(What:="Preis", LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 1).Address).Select
End With
End Sub
Das ist dann nochmal alles was im Buchungen drin steht!
Const ws_DB As String = "Buchungen"
Const ws_Eingabe As String = "Buchungen_Change"
Sub Buchungenanlegen_DBEingabe()
Call ws_Unprotect(ws_DB, ws_Eingabe)
'Tabelle einlesen
Dim tbl As ListObject
Set tbl = Worksheets(ws_DB).ListObjects(1)
With Worksheets(ws_Eingabe)
'Spalte K und Q Leeren
.Columns("K").ClearContents
.Columns("Q").ClearContents
'Buchungsnummer eintragen
.Range("K12").Value = tbl.DataBodyRange(tbl.DataBodyRange.Rows.Count, 1).Value + 1
'Tabelleblatt navigieren
Call Sheetswitch(ws_Eingabe)
'Datum eintragen
.Range("K18").Value = Date
'Zelle auswählen
.Range("K20").Select
End With
Call ws_Protect(ws_DB, ws_Eingabe)
End Sub
Sub BuchungenAnlegen_EingabeDB()
Call ws_Unprotect("Produkte", ws_Eingabe, ws_DB)
Dim tbl As ListObject
Dim header As Variant
Dim Spalte As Long
Spalte = 1
Dim Zeile As Long
Dim rng As Range
With Worksheets(ws_DB)
'Tabelle einlesen
Set tbl = .ListObjects(1)
'Zeile hinzufügen
tbl.ListRows.Add
'Zeile definieren
Zeile = tbl.DataBodyRange.Rows.Count
'Zeilenhöhe anpassen
.Rows(Zeile + tbl.HeaderRowRange.Row).RowHeight = .Rows(tbl.HeaderRowRange.Row + 1).RowHeight
End With
With Worksheets(ws_Eingabe)
'Schleife über alle Tabellenheader
For Each header In tbl.HeaderRowRange
tbl.DataBodyRange(Zeile, Spalte).Value = _
.Range(.Cells.Find(What:=header, LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 1).Address).Value
If header = "Menge" Then
'Bestand zu Produkt-ID suchen
Set rng = ThisWorkbook.Worksheets("Produkte").Columns("D").Find(What:=.Range("K24").Value, LookIn:=xlValues, LookAt:=xlWhole).Offset(0, 4)
If .Range("K20").Value = "Kauf" Then
rng.Value = rng.Value + .Range("Q20")
Else
rng.Value = rng.Value - .Range("Q20")
End If
End If
Spalte = Spalte + 1
Next header
End With
'Tabellenblatt Buchungen auswählen und in Zeile springen
Call Nav_Buchungen
tbl.DataBodyRange(Zeile, 1).Select
ActiveWindow.ScrollRow = Zeile + tbl.HeaderRowRange.Row
Call ws_Protect("Produkte", ws_Eingabe, ws_DB)
End Sub
|