Collapse column

Autor Thema: Abwägung von Lösungsalternativen (grundlegende Anfängerfrage)  (Gelesen 997 mal)

Offline FlorianF

  • Jr. Member
  • **
  • Beiträge: 62
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Mittelmäßig
  • Version [Office] : Office 2016
Abwägung von Lösungsalternativen (grundlegende Anfängerfrage)
« am: Februar 23, 2017, 20:33:37 Nachmittag »
      Hi Leute,

      mich interessiert mal eure Meinung zu den nachfolgende beschrieben Sachverhalt und den Lösungswegen.

      Ich habe eine Excel-Datei welche Projektdaten speichert. Zu den Daten zählen:

      • Projektname
      • Gesamteinzahlung
      • Gesamtauszahlungen
      • Teil-Einzahlung mit Angabe
        • Datum
        • Euro-Betrag
        • Prozent
      • Teilauszahlungen mit gleichen Angaben wie Teil-Einzahlungen

      Die Erfassung der Daten erfolgt über ein Userform und wird dann für jedes Projekt zeilenweise in eine Tabelle geschrieben. Nun gibt es ja verschiedene Möglichkeiten diese Daten in die Tabelle zu schreiben:

      • Zwischenspeichern in einem Array und diese dann mit einer Schleife zum Speichen in der Tabelle durchlaufen
      • Speichern in einem eigene datentyp und dann jedes Feld einzeln speichert
      • Eigene Klasse für das Projekt welche die Daten eine Projekts entgegen nimmt

      Bei den ersten zwei Alternativen könnte man die Schritte auch noch in eigene Prozeduren auslagern um es etwas schlanker zu gestalten.

      Wie würdet ihr es denn lösen? Ich weiss, dass es aufgrund der wenigen Daten wohl keine großen Unterschiede in Sachen Performance macht aber doch sicher in der Einfachheit der Erweiterung des Programms mit Feldern, anderen Funktionen usw.

      Ich muss dazu sagen, dass ich noch ziemlicher Anfänger bin, daher vielleicht die recht umfangreiche Fragestellung. Aber ich finde, dass ich an diesem Beispiel ganz gut die unterschiedlichen Vor- und Nachteile dieser Arten verstehen kann. Insbesondere habe ich noch nicht ganz kapiert warum man eine Klasse anlegen sollte und nicht einfach nur separate Prozeduren und Funktionen.

      Ich hoffe ihr versteht alles, wenn nicht einfach nachfragen. Danke euch!!

      Beste Grüße
      Flo

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Antw: Abwägung von Lösungsalternativen (grundlegende Anfängerfrage)
« Antwort #1 am: Februar 24, 2017, 09:45:48 Vormittag »
Hallo,

ja nachdem, wie Deine Userform aufgebaut ist, z.B. falls diese ermöglicht, alle Datensätze zu bearbeiten,
also nicht nur eine Zeile, bietet sich als performateste Methode an...
  • Daten als Array einlesen
  • Daten ggf. modifizieren
  • Daten als Array zurückschreiben

Klassen bieten sich beispielsweise an...
  • Du hast eine ganze Menge an Steuerelementen, z.B. Textboxes oder Checkboxes, deren Ereignisse Du
    nicht alle einzeln anlegen/schreiben möchtest, sondern über das Ereignis eine Klasse abfangen möchtest.
  • Du brauchst z.B. Hilfsobjekte, die Dir ermöglichen Deinen Code besser zu organisieren, z.B. eine Klasse,
    die Arrays implementiert, aber mit Zusatzfunktionen wie Sortieren, Elemente löschen/hinzufügen.
  • Man kann z.B. eine Klasse anlegen, die die Konfiguration einer Anwendung bereitstellt und sich um das
    Einlesen/Setzen/Abrufen usw. von Deinen Anwendungseinstellungen kümmert.
  • Anderes Beispiel ist eine Klasse, die eine Verbindung zu einer Datenbank herstellt und alle dortigen
    Operationen ausführt.
Die Beispiele hier oben (bis auf das erste mit den Steuerelementen) lassen sich aber auch als Module anlegen,
ohne Klassen zu verwenden. Das ist eine Designfrage.

Da Du sagst, Du bist Anfänger, und wenn Du Spass an der Sache hast, wäre ein Vorschlag, wie folgt
vorzugehen...
  • Alles, was nicht die Userform betrifft, in ein Modul auslagern und in der Userform über Funktionen aufrufen, z.B.
    GetProjectName(ProjectID), SetProjectName(ProjectID, Data) usw.
  • Die Funktionen im Modul in weitere kleinere Teile zerlegen, unter anderem auch weitere Module mit noch mehr in
    sich logische kleineren Einheiten. Z.B. ein Modul für die Projekte als Ganzes, ein Modul für Zahlungen, usw. Spätestens
    dann wirst Du merken, dass Du Beziehungen zwischen den Modulen herstellen musst (Variablen, Prozeduren, ...).
  • Dann wärst Du von den Klassen nicht mehr ganz weit weg und kannst versuchen, das Modell in Klassen abzubilden.
Gruß
 
« Letzte Änderung: Februar 24, 2017, 09:50:36 Vormittag von maninweb »
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Offline FlorianF

  • Jr. Member
  • **
  • Beiträge: 62
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Mittelmäßig
  • Version [Office] : Office 2016
Antw: Abwägung von Lösungsalternativen (grundlegende Anfängerfrage)
« Antwort #2 am: Februar 24, 2017, 17:36:00 Nachmittag »
Hi,

erstmal danke für die ausführliche Antwort.

Meine Form speichert immer nur einen einzelnen Datensatz. Ich habe es bis jetzt auch als Array gelöst um zunächst alle Felder einzeln in das Array zu lesen und dann über eine For-Next Schleife in die Tabelle zu schreiben. Das schien mir der effizienteste Programmier-Weg.

Dein Vorschlag habe ich in meinen Programm (es kann mehr als nur ein paar Projektdaten in eine Tabelle schreiben  :D) schon an einigen anderen Stellen so umgesetzt. Ich habe oft gemerkt, dass ich Dinge doppelt programmiere, lediglich mit anderen Parametern oder, dass der Code in eine Prozedur zu lang wird. Dann habe ich mir separate Prozeduren und Functions gebaut um es auszulagern. Ich denke da sieht mein Programm schon recht professionell aus, wobei es sicher auch noch an einigen Stellen besser geht. Aber das werde ich mit zunehmender Erfahrung bestimmt auch noch merken.

Was für mich vielleicht den "Klick" herbeiführt um das mit den Klassen richtig zu verstehen. Was wäre den ein oder mehrere Features die meine Form können müsste, damit es sinnvoll wäre über eine Klasse zu gehen? Oder ist es eher schon eine Glaubensfrage ob mit normalen Subs/Functions oder über eine Klasse?

Beste Grüße
Flo

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Antw: Abwägung von Lösungsalternativen (grundlegende Anfängerfrage)
« Antwort #3 am: Februar 24, 2017, 17:53:56 Nachmittag »
Hallo,

Angenommen, Du würdest in Deiner Userform die Steuerelemente per Code anlegen, also zur Laufzeit. Dann kämst Du um
Klassen nicht herum, um auf die Ereignisse (Click, Change, ...) zu reagieren.

Angenommen, Du hättest ganz viele Steuerelemente, jetzt wie aktuell statisch per Designer angelegt, so um, sagen wir mal
25 Checkboxen, und Du hättest keine Lust, für jede Checkbox die Ereignisprozedur anzulegen oder würdest das gerne zen-
tralisiert machen. Dann wäre ebenfalls eine Klasse sinnvoll. Für wenige Steuerelemente desselben Typs lohnt sich das nicht.

Ansonsten, schau' mal bei online-excel.de rein, die haben Beispiele.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Wenn du dich noch intensiver mit Excel beschäftigen möchtest, dann empfiehlt sich ein Online-Kurs,
in dem du sehr viel über Excel erfährst und das gelernte umgehend in der Praxis anwenden kannst.