in meinem Projekt möchte ich Aufträge anlegen und diese auswerten lassen.
Ich habe bereits eine Datenbank und ein Eingabeformular erstellt mit der Aufträge angelegt, bearbeitet und gelöscht werden können (VBA-Code siehe unten).
Jedoch fehlen mir noch einige Punkte, bei der ich euere/deine Hilfe benötige.
1. Wenn ein Auftrag angelegt wird, kann man bis jetzt nur ein Produkt anlegen. Ein Auftrag beinhaltet aber mehrere Produkte mit unterschiedlichen Angaben (Bsp.: Dimensionen, Qualität, ...). Hierbei soll durch einen Button beliebig viele Produkte dem einen Auftrag hinzugefügt werden.
2. In der Datenbank sollen unter dem jeweiligen Auftrag alle hergestellten Produkte aufgeführt werden. (Bsp.: Auftrag 1: Produkt 1, Produkt 2, Produkt 3 -> Auftrag 2: Produkt 1, Produkt 2, usw.)
3. Jedes Produkt besitzt einen individuellen Verkaufspreis. Diese Preis setzt sich aus sieben Kategorien des Produkte zusammen (Länge, Breite, Stärke, Qualität, Art, ...). Der Verkaufspreis des jeweiligen Produktes soll automatisch aus einer externen Preisliste in dem Auftrag und anschließend in die Datenbank eingetragen werden.
4. Nachdem alle Aufträge für einen bestimmten Zeitraum angelegt wurden, sollen aus den Daten der jeweiligen Aufträge einige Berechnungen stattfinden. Die Berechnungen habe ich bereits auf einem separaten Arbeitsblatt erstellt (siehe Excel-Anhang: Arbeitsblatt "Berechnung").
5. Aus den berechneten Daten und denen aus der Eingabe des Auftrags sollen auf einem Dashboard eine Auswertung dieser Daten stattfinden. Ich habe bereits grob dieses Dashboard erstellt und mit den Berechnungen verknüpft. Die Auswertung soll zum einen mittels Durchschnittswerten und mittels Diagrammen erfolgen.
6. Die Auswertung soll nur Aufträge beinhalten für einen bestimmten Betrachtungszeitraum (Bsp.: von Mai 23 bis Sep 23, oder von KW30 bis KW31). Der Nutzer soll nur noch den Betrachtungszeitraum im Dashboard eingeben und die Werte und Diagramme der Auswertung erhalten.
Mir ist bewusst, dass für die angesprochenen Punkte eigentlich ein komplettes Programm benötigt wird. Jedoch möchte ich das Projekt, sofern möglich, in Excel (VBA) umsetzten.
Ich hoffe ihr/du kannst mir bei meinem Projekt helfen.
Anbei findet ihr / findest du meine Excel-Datei.
Vielen Dank im Voraus
MfG Gabriel
Excel-Datei:
https://www.herber.de/bbs/user/163641.xlsx
VBA-Code:
Sub AuftragLöschen()
'Abfrage, ob Auftrag wirklich gelöscht werden soll
Dim Antwort
Antwort = MsgBox("Soll der Auftrag wirklich gelöscht werden?", vbYesNo + vbQuestion, "Auftrag wirklich löschen?")
If Antwort = vbYes Then ActiveCell.EntireRow.Delete
End Sub
Sub AufträgeChange_EingabeDB()
'Tabelle einlesen
Dim tbl As ListObject
Set tbl = tb_Datenbank.ListObjects(1)
Dim Zeile As Long
'Auftrag anlegen oder bearbeiten?
If tb_Eingabeformular.Shapes.Range(Array("txt_Anlegen", "img_Anlegen")).Visible = True Then
'Auftrag anlegen
'Zeile hinzufügen
tbl.ListRows.Add
'Zeile in Variable speichern
Zeile = tbl.DataBodyRange.Rows.Count
'Auftrag bearbeiten
Else
Zeile = Range("Dateneingabe5[Auftrags-Nr.]").Find(What:=tb_Eingabeformular.Range("H10").Value _
, LookIn:=xlValues, LookAt:=xlWhole).Row - tbl.HeaderRowRange.Row
End If
'Datenbank befüllen
With tb_Eingabeformular
tbl.DataBodyRange(Zeile, 1).Value = .Range("H10").Value
tbl.DataBodyRange(Zeile, 2).Value = .Range("H15").Value
tbl.DataBodyRange(Zeile, 3).Value = .Range("H17").Value
tbl.DataBodyRange(Zeile, 4).Value = .Range("H19").Value
tbl.DataBodyRange(Zeile, 5).Value = .Range("H21").Value
tbl.DataBodyRange(Zeile, 6).Value = .Range("H23").Value
tbl.DataBodyRange(Zeile, 7).Value = .Range("H25").Value
tbl.DataBodyRange(Zeile, 8).Value = .Range("H27").Value
tbl.DataBodyRange(Zeile, 9).Value = .Range("L10").Value
tbl.DataBodyRange(Zeile, 10).Value = .Range("L15").Value
tbl.DataBodyRange(Zeile, 11).Value = .Range("L17").Value
tbl.DataBodyRange(Zeile, 12).Value = .Range("L19").Value
tbl.DataBodyRange(Zeile, 13).Value = .Range("L21").Value
tbl.DataBodyRange(Zeile, 14).Value = .Range("L23").Value
tbl.DataBodyRange(Zeile, 15).Value = .Range("L25").Value
tbl.DataBodyRange(Zeile, 16).Value = .Range("L27").Value
tbl.DataBodyRange(Zeile, 17).Value = .Range("L29").Value
tbl.DataBodyRange(Zeile, 18).Value = .Range("L31").Value
tbl.DataBodyRange(Zeile, 19).Value = .Range("L33").Value
tbl.DataBodyRange(Zeile, 20).Value = Date
End With
'Navigieren zu Tabellenblatt Datenbank
tb_Datenbank.Select
ActiveWindow.ScrollRow = tbl.DataBodyRange(Zeile, 1).Row
tbl.DataBodyRange(Zeile, 1).Select
End Sub
Sub AufträgeAnlegen_DBEingabe()
'Tabelle einlesen
Dim tbl As ListObject
Set tbl = tb_Datenbank.ListObjects(1)
With tb_Eingabeformular
'Spalten leeren
.Columns("H").ClearContents
.Columns("L").ClearContents
'Auftrags-Nr. einfügen
.Range("H10").Value = tbl.DataBodyRange(tbl.DataBodyRange.Rows.Count, 1).Value + 1
'Navigieren auf das Eingabeformular
.Shapes.Range(Array("txt_Anlegen", "img_Anlegen")).Visible = True
.Shapes.Range(Array("txt_Bearbeiten", "img_Bearbeiten")).Visible = False
.Select
'Zelle auswählen
.Range("H15").Select
End With
End Sub
Sub AufträgeBearbeiten_DBEingabe()
'Tabelle einlesen
Dim tbl As ListObject
Set tbl = tb_Datenbank.ListObjects(1)
Dim Zeile As Long
Zeile = ActiveCell.Row - tbl.HeaderRowRange.Row
With tb_Eingabeformular
'Spalten leeren
.Columns("H").ClearContents
.Columns("L").ClearContents
'Eingabeformular befüllen
.Range("H10").Value = tbl.DataBodyRange(Zeile, 1).Value
.Range("H15").Value = tbl.DataBodyRange(Zeile, 2).Value
.Range("H17").Value = tbl.DataBodyRange(Zeile, 3).Value
.Range("H19").Value = tbl.DataBodyRange(Zeile, 4).Value
.Range("H21").Value = tbl.DataBodyRange(Zeile, 5).Value
.Range("H23").Value = tbl.DataBodyRange(Zeile, 6).Value
.Range("H25").Value = tbl.DataBodyRange(Zeile, 7).Value
.Range("H27").Value = tbl.DataBodyRange(Zeile, 8).Value
.Range("L10").Value = tbl.DataBodyRange(Zeile, 9).Value
.Range("L15").Value = tbl.DataBodyRange(Zeile, 10).Value
.Range("L17").Value = tbl.DataBodyRange(Zeile, 11).Value
.Range("L19").Value = tbl.DataBodyRange(Zeile, 12).Value
.Range("L21").Value = tbl.DataBodyRange(Zeile, 13).Value
.Range("L23").Value = tbl.DataBodyRange(Zeile, 14).Value
.Range("L25").Value = tbl.DataBodyRange(Zeile, 15).Value
.Range("L27").Value = tbl.DataBodyRange(Zeile, 16).Value
.Range("L29").Value = tbl.DataBodyRange(Zeile, 17).Value
.Range("L31").Value = tbl.DataBodyRange(Zeile, 18).Value
.Range("L33").Value = tbl.DataBodyRange(Zeile, 19).Value
'Navigieren auf das Eingabeformular
.Shapes.Range(Array("txt_Anlegen", "img_Anlegen")).Visible = False
.Shapes.Range(Array("txt_Bearbeiten", "img_Bearbeiten")).Visible = True
.Select
'Zelle auswählen
.Range("H15").Select
End With
End Sub