Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1948to1952
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
Inhaltsverzeichnis

Aufträge mit mehreren Produkten anlegen und auswerten lassen

Aufträge mit mehreren Produkten anlegen und auswerten lassen
22.10.2023 21:28:43
Gabriel
Hallo Zusammen,

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

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aufträge mit mehreren Produkten anlegen und auswerten lassen
23.10.2023 10:18:50
MCO
Hallo Gabriel!

So umfassend kann Dir keiner Deine Tabelle bauen. Bauen deshalb, weil deine Bereiche dringend getrennt aufgeführt gehören:
Aufträge, Produkttabelle und Berechnungen gehören in 3 verschiedene Tabs.
Außerdem glaube ich, dass du deutlich zu viel in den Zeilen berechnest:
Für die Anlage jedes Auftrages musst du natürlich rechnen. Wenn sich aber morgen die Preise ändern, möchtest du doch nicht abgearbeitete Aufträge neu berechnen, oder?
Ich glaube außerdem, dass in Q44:Q55 fehlerhafte Formelbezüge stehen, wohl falsch kopiert...

Versuch doch mal, die Bereiche zu trennen und die jeweiligen Berechnungen als Funktion in VBA einzubringen, jedenfalls für die Aufträge. Ist nicht so schwer.

Beispiel: Summieren
public function Summieren(A as single, b as single) as single

Summieren = A+B
end function


Als Formel im Tabellenblatt:
=Summieren(15;20)

Als Wert mit VBA
Range ("A1") = summieren(15,20)


Als nächstes wäre es sicher sinnvoll, deine Beispieldatei im xlsm-Format hochzuladen, wenn du schon Makros eingebaut hast.

Bei Problemen mit einzelnen Schritten wird dir sicher geholfen, aber so umfassend kann das keiner mal eben umsetzen.
Meld Dich, wenn es hakt, am besten in einem neuen Threat.

Gruß, MCO
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige