Excel Listen Umbau - Klassen Objekte Prozedural oder Objektorientiert

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Tiage.

    Excel Listen Umbau - Klassen Objekte Prozedural oder Objektorientiert

    Hallo und guten Tag,

    Ich habe ein kleines Projekt vor und möchte herausfinden ob ich auf dem Holzweg bin. Ich bin kein blutiger Neuling beim
    programmieren von Excel habe aber bisher noch kein Klassenmodul erstellt und frage mich ob ich das machen soll. Es folgt die
    Beschreibung warum und was ich machen will. Ggf kann mir jemand hier einen Tip geben was sinn macht.
    • Auftrag ist eine einfache Tatsache
    • Vorgang ist eine einfache Tatsache
    • Status ist eine einfache Tatsache
    • term ist eine Excel Liste
    • SAP ist eine Excel Liste
    • Master ist eine Excel Liste
    • (Ziel - Liste) ist eine Excel Liste


    In verschiedenen Excel listen stehen Aufträge drin. Gelistet nach Auftragsnummer und Auftragsposition. Die Listen
    entsprechen einer Sammlung unterschiedlicher Attributen zu den Aufträgen. Es sollen die Aufträge in der Ziel Liste
    neu zusammengestellt werden und die Attribute übernommen werden. Allerdings in einer anderen Art der Auflistung.
    Jeder Auftrag hat Vorgänge diese Vorgänge haben einen Status. Die Vorgänge und ein Teil des Status steht in der SAP
    Liste. Hier entspricht eine Zeile einem Vorgang. Für einen Autrag gibt es mehrere Vorgänge und somit mehrere Zeilen.
    Diese Struktur soll in die Ziel liste übernommen werden. Das heist à 1 Auftrag steht schlussendlich in mehrere Zeilen,
    eine Zeile entspricht einem Vorgang dieses Auftrages mit dem Entsprechenden aktuellen Datum und Status.Aus der
    Master Liste kommen Informationen zum Auftrag wie zb. Vertragsstrafe, Projektmanager Lieferzeit etc. Eine Zuordnung
    der Information erfolgt über Auftragsnummer und Auftragsposition.Aus der term Liste kommen der Status und Termin des
    jeweiligen Vorgangs, wobei diese Daten im Vergleich zum erwünschten Ergebnis in verschiedenen Spalten des jeweiligen
    Auftrags aufgehoben sind (Transponiert) .

    Fragen/Gedanken
    1. Brauch ich Klassen, oder kann ich mit Arrays oder anderen Objekten arbeiten.
    2. Ist das nutzen von Objekten/Klassen bei VBA anders als bei normalen Programmen, tue ich mir da etwas an was keinen Sinn macht?
    3. Wenn Klassen/Objekte genutzt werden können und es auch der Einfachheit halber Sinn macht, sollen dann die Attribute eines Auftrags als Property der Klasse zugefügt werden oder besser als variable, oder?
    4. Wie sieht die Struktur aus? Ist eine Zeile jeweils das Objekt? Die Datenbank/Excel-liste die Klasse?

    Dank / Gruß
    Timo
    ***********************************
    Practice what you preach :thumbsup:
    Eine wichtige Erkenntnis ist, dass jedes Worksheet bereits eine instantiierte Klasse ist.
    Ebenso das Workbook.
    Diese Klassen kannst du erweitern mit Properties und Functions.
    Wenn du diesen Objekten dann noch vernünftige Namen gibst (in der IDE, das ist nicht der Sheet-Name), dann kannst du sie im Code auch lesbar ansprechen.

    Ansonsten gilt grundsätzlich, dass Objektorientierung, wenn du sie mal drauf hast, sehr viel erleichtert.
    Objektorientierung in VBA ist sehr ausgereift, aber es werden nicht alle Features wie in .Net unterstützt.
    Der entscheidende Unterschied ist das Fehlen von Vererbung.
    Aber bis auf das ist mir noch nichts aufgefallen, was tatsächlich fehlen würde.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Danke petaod,

    Das hört sich so an als ob ich keine neuen Klassen "erfinden" muss bzw. darf. OK.
    Bzgl. Namen hab ich eigentlich bisher immer mit dem set Befehl gearbeitet und mehr oder wenige
    sinnvolle Namen für die Public objekte genutzt.

    Allerdings ist das arbeiten mit Arrays und das umsetzten der einzelnen Werte von der einen Liste in die
    andere ein wenig umfangreich und nach meiner überzeugung und von meinem früheren EDV unterricht
    sollte mit objekten das sehr viel übersichtlicher und einfacher gehen.

    Ich stelle mir einfach vor das Vorgang und Auftrag objekte sind mit eigenschaften.
    Zeilen sind dann Objekte mit Spalten werten als Eigenschaft. Diese kann ich mit dem Namen der Eigenschaft ansprechen.
    Frage ist ob ich noch ein Array brauch oder ob sowas wie eine Collection mir helfen kann.

    Bisher hab ich einfach die Excellisten in ein Array eingelesen und dann von einem Array ins andere Übersetzt.
    Die Herausforderung ist aber das ich immer das Ganze Array der Ziel Liste bzw. der quellliste nach dem Aktuellen
    Auftrag / Vorgang durchsuchen muss - bisher immer mit for each oder einer for schleife. Das frisst Zeit ohne ende
    bei ca. 300 Datensätzen.

    Nun ja, ich weis einfach nicht wie ich da weiter machen soll / kann und verspreche mir von "neuen" objekten etwas.
    Ist meine Beschreibung zu cryptisch oder weist Du was ich für ein Problem hab.

    Gruß
    Timo
    ***********************************
    Practice what you preach :thumbsup:

    Tiage schrieb:

    Das hört sich so an als ob ich keine neuen Klassen "erfinden" muss bzw. darf. OK.
    Von nicht dürfen war nie die Rede.
    Wo eine neue Klasse angebracht ist, sollst du eine erstellen.

    Oft hast du aber eine Sheet mit ganz bestimmten Daten.
    Hier das Sheet-Objekt um witere Properties zu erweitern, macht Sinn.

    Tiage schrieb:

    Bzgl. Namen hab ich eigentlich bisher immer mit dem set Befehl gearbeitet und mehr oder wenige
    sinnvolle Namen für die Public objekte genutzt.
    Du sprichst von Variablen, die dem Objekt als Pointer dienen.
    Ich spreche vom Namen der Klasse, bzw. in dem Fall von dem Namen des implizit definierten Sheet-Objekts, dessen Name du in der IDE verändern kannst, um es mit sprechendem Namen adressieren zu können.

    Tiage schrieb:

    Ich stelle mir einfach vor das Vorgang und Auftrag objekte sind mit eigenschaften.
    Sind die Daten dafür alle in einem Worksheet?

    Tiage schrieb:

    Zeilen sind dann Objekte mit Spalten werten als Eigenschaft.
    Fast.
    Zeilen sind Range-Objekte, die eine Range-Collection von Zellen beinhalten. Die Zellen beinhalten die Daten.

    Tiage schrieb:

    Diese kann ich mit dem Namen der Eigenschaft ansprechen.
    Für namentliche Adressierung solltest du in dem Worksheet Tables anlegen.
    Dann funktioniert das hervorragend.

    Tiage schrieb:

    der quellliste nach dem Aktuellen
    Auftrag / Vorgang durchsuchen muss - bisher immer mit for each oder einer for schleife. Das frisst Zeit ohne ende
    bei ca. 300 Datensätzen.
    Dafür gibt es die Find-Methode.
    Da musst du nicht loopen.

    Tiage schrieb:

    weist Du was ich für ein Problem hab.
    Ja.
    Dein Problem ist, dass du das Excel-Objektmodell überhaupt nicht kennst und deswegen versuchst, das Rad nochmals zu erfinden.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    ​Dein Problem ist, dass du das Excel-Objektmodell überhaupt nicht kennst und deswegen versuchst, das Rad nochmals zu erfinden.

    Nagel auf den Kopf getroffen - Scheinst auch Handwerklich begabt zu sein. :D
    Danke,

    Hab vor einen irgendgearteten Onlinekurs oder VHS zu besuchen um das zu ändern.
    Vorerst werd ich mich hier noch rumtreiben und "Dumme" Fragen stellen.

    Bis auf weiteres (bis ich Deine Antworten alle durch bin und einigermaßen versteh um was es geht)

    Grüße
    Timo
    ***********************************
    Practice what you preach :thumbsup: