DPunch hat geschrieben:
Würde ich nicht sagen, User Defined Types sind eine unausgegorene Sache mit einigen Pitfalls, daher bei der Arbeit mit OOo Makros allen meinen bisherigen Erfahrungen nach unbrauchbar. Und überflüssig obendrein.
Ich habe bis jetzt noch nie Probleme mit UserTypes gehabt. Könntest du bitte erklären, was für Fallgruben du meinst?
Ich würde dir recht geben, wenn du sagen würdest, dass man alles was man mit UserTypes machen kann auch anders lösen kann, aber das heißt nicht, dass sie Überflüssig sind.
Zum teil ist der Code einfach besser lesbar, wenn man UserTypes statt Arrays nimmt, da man dann weiß, was die Variable für einen wert hat.
Hier ein echtes Beispiel von mir: (i und j sind Schleifen Indices)
Code: Alles auswählen
Type masterType 'Enthält alle Werte aus der Makro-Tabelle für die Vorlagen.
masterKey As Integer 'Vorlagen-Nummer
smasterName As String 'Vorlagen-Name
nStartRow1 As Long 'Erste Zeile Formeln
nStartRow2 As Long 'Zweite Zeile Formeln
sPrintArea1 As String '1. Druckbereich
sPrintArea2 As String '2. Druckbereich
nNumberOfDoc AS Integer 'Anzahl der zu erstellenden PDFs
fRestZeilenumbruch1 As Single 'Zeilenumbruch1
fRestZeilenumbruch2 As Single
sCondition1 As String 'Erste Bedingung
sAnd_Or As String 'Verknüpfung
sCondition2 As String '2. Bedingung
nProject As Integer 'Spalte, nach der neues Blatt erzeugt wird (offset)
sSortCond As string
End Type
...
Dim masters( 100) As masterType
...
masters(j).fRestZeilenumbruch1 = oSheet.getcellbyposition(7,18+i).Value
die Namen sind einfach aussagekräftiger als :
Code: Alles auswählen
...
Dim masters(13,100)
...
masters(7,j)= oSheet.getcellbyposition(7,18+i).Value
Mit 14 eindimensionalen Arrays habe ich zwar auch die Namen, aber so sehe ich gleich, welche Variablen zusammen gehören,
da ich in dem Code auch noch andere Arrays verwende, die aber ganz andere Daten enthalten.
Noch ein Grund, warum 14 eindimensionalen Arrays in meinem Fall nicht in Frage kommen ist, dass "masters()" mehrmals an verschiedene Funktionen übergeben wird.
Und ich möchte nicht 14 einzelne Arrays an eine Funktion übergeben müssen.
DPunch hat geschrieben:Die Herangehensweise, die ich persönlich verwenden würde, wäre entweder ein 2-Dimensionales Array oder, sogar noch eher, zwei seperate Arrays.
In diesem Fall gebe ich dir recht, da dadurch die Methode setDataArray statt einer Schleife verwendet werden kann.(enormer Geschwindigkeitsgewinn)
DPunch hat geschrieben:
Naja, was heisst Arbeit leichter machen? Wenn Du bei jeder Änderung erstmal über ein Calc-Sheet oder ähnliche Hilfsmittel Deinen Quellcode produzieren lassen musst, ist das nichts, worüber man ernsthaft nachdenken kann.
Das muss man ja nicht für jede kleine Änderung machen.beim ersten Erzeugen ist das aber schon ein Forteil,
denn es macht einen gewaltigen Unterschicht, ob ich 2mal 22 Zeilen schreiben muss, oder eben nur einmal + eine kleine Formel.
(je mehr zielen, desto grösser der Zeitgewinn.)
DPunch hat geschrieben:
Das musst Du mir erklären - das Konzept von Funktionen ist ganz simpel: einmal die Arbeit investieren, um sie zu schreiben, danach einfach verwenden.
Auch wenn ich Workarounds wie das hier besprochene Erzeugen temporärer Module / Bibliotheken niemals auf beruflicher Ebene anwenden würde, vermutlich nichtmal auf "privater", so kann man eins definitiv festhalten: es ist weniger Arbeit, als wenn man einen User-Type, ein Array o.Ä. verwendet.
Es ist nur dann weniger arbeit, wenn die Funktion schon fertig ist:
Array: 22 Zeilen+ eine leichte Calc-Formel = 23 Zeilen
Funktion: 22 Zeilen +39 Zeilen komplizierte Funktion = 61 Zeilen
(Wahrscheinlich mehr, da man bestimmt ein par Änderungen während des Programmierens vornehmen muss.)
Gruß Frieder