Anzeige
Archiv - Navigation
220to224
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
220to224
220to224
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Optimierung von VBA-Code

Optimierung von VBA-Code
19.02.2003 16:34:22
Anna
Hallo ihr Spezialisten,
ich weis, es ist eine Zumutung sich folgenden Code anzuschauen, aber ich bin durchaus lernwillig und lernfähig. Deshalb traue ich mich mein Produkt hier vorzustellen und zu fragen, wie man so etwas optimieren kann. Gibt es vielleicht sogar ein Programm, das diesen Code analysiert und in optimaler Form wieder zur Verfügung stellt oder muss das ein findiger Kopf herausfinden. Ich bin leider kein Programmierer sondern nur etwas handwerklich begabt und stricke mir aus meinem (dürftigen) Wissen und mit Hilfe dieses tollen Forums meine Programme zusammen.
Hintergrund meines Programmes ist, das zum Beginn eines bestimmten Verzinsungsdatums zunächst die Höhe des Kapitals zu diesem Zeitpunkt festgestellt werden muss. Über Textboxen frage ich ab Beginn des Anspruchs die Höhe der Geldleistung ab und addiere die einzelnen Beträge zum o.g. Kapital. Kompliziert wird es dadurch, dass sich der Betrag mitten im Monat ändern kann und ich dann diesen Monat mit den tatsächlichen Tagen und den verschiedenen Beträgen berechnen muss. Dazu kommen noch die vollen Monate vor diesem und nach diesem Monat bis zum Datum des Verzinsungsbeginnes. Verwirrt? Ich manchmal auch! Für zwei Textboxen ist der folgende Code. Dabei ist noch nicht einmal berücksichtigt, dass das Datum in der ersten Textbox auch nach dem 1.des Monates sein kann. Das wollte ich im nächsten Block berechnen. Und das ganze dann für insgesamt 18 (achtzehn) Textboxen! Eine Funktion "Monatstage" existiert zu diesem Programm.

'Beginn am 1.d.Monats, 2.Textbox mit Datum
If Day(txtFaelligkeit1.Text) = 1 And Day(txtFaelligkeit2.Text) = 1 Then
If CDate(txtFaelligkeit2.Text) < CDate(txtBeginnVerzinsung.Text) Then

'Leistung bis Monatsende
KapitalF1 = DateDiff("m", (CDate(txtFaelligkeit1.Text)), (CDate(txtFaelligkeit2.Text))) * txtEuroFaelligkeit1.Text
If CDbl(txtEuroFaelligkeit2.Text) > 0 Then
KapitalF2 = DateDiff("m", (CDate(txtFaelligkeit2.Text)), (CDate(txtBeginnVerzinsung.Text))) * txtEuroFaelligkeit2.Text
KapitalF = KapitalF1 + KapitalF2
End If
If CDbl(txtEuroFaelligkeit2.Text) = 0 Then
KapitalF = KapitalF1
End If
End If
End If

'Ende der Leistung vor Monatsende im gleichen Monat
If Year(CDate(txtFaelligkeit1)) & Month(CDate(txtFaelligkeit1.Text)) = Year(CDate(txtFaelligkeit2)) & Month(CDate(txtFaelligkeit2.Text)) Then
If Day(txtFaelligkeit1.Text) = 1 And Day(txtFaelligkeit2.Text) > 1 Then
Tage1 = Day(txtFaelligkeit2.Text) - 1
KapitalF1 = (Round(txtEuroFaelligkeit1.Text / Monatstage(txtFaelligkeit2.Text) * Tage1, 2))
If CDbl(txtEuroFaelligkeit2.Text) > 0 Then
Tage2 = Monatstage(txtFaelligkeit2.Text) - Day(txtFaelligkeit2.Text) + 1
KapitalF2 = (Round(txtEuroFaelligkeit2.Text / Monatstage(txtFaelligkeit2.Text) * Tage2, 2))
plusEinMonat = DateSerial(Year(txtFaelligkeit1.Text), Month(txtFaelligkeit1.Text) + 1, (Day(txtFaelligkeit1.Text)))
KapitalF3 = DateDiff("m", (CDate(plusEinMonat)), (CDate(txtBeginnVerzinsung.Text))) * txtEuroFaelligkeit2.Text
KapitalF = KapitalF1 + KapitalF2 + KapitalF3
End If
If CDbl(txtEuroFaelligkeit2.Text) = 0 Then
If Year(CDate(txtFaelligkeit1)) & Month(CDate(txtFaelligkeit1.Text)) = Year(CDate(txtFaelligkeit2)) & Month(CDate(txtFaelligkeit2.Text)) Then
KapitalF = KapitalF1
End If
End If
End If
End If

'Ende der Leistung vor Monatsende in einem anderen Monat
If Year(CDate(txtFaelligkeit1)) & Month(CDate(txtFaelligkeit1.Text)) <> Year(CDate(txtFaelligkeit2)) & Month(CDate(txtFaelligkeit2.Text)) Then
If Day(txtFaelligkeit1.Text) = 1 And Day(txtFaelligkeit2.Text) > 1 Then
If CDbl(txtEuroFaelligkeit2.Text) > 0 Then
KapitalF1 = DateDiff("m", (CDate(txtFaelligkeit1.Text)), (CDate(txtFaelligkeit2.Text))) * txtEuroFaelligkeit1.Text
Tage1 = Day(txtFaelligkeit2.Text) - 1
KapitalF2 = (Round(txtEuroFaelligkeit1.Text / Monatstage(txtFaelligkeit2.Text) * Tage1, 2))
Tage2 = Monatstage(txtFaelligkeit2.Text) - Day(txtFaelligkeit2.Text) + 1
KapitalF3 = (Round(txtEuroFaelligkeit2.Text / Monatstage(txtFaelligkeit2.Text) * Tage2, 2))
plusEinMonat = DateSerial(Year(txtFaelligkeit2.Text), Month(txtFaelligkeit2.Text) + 1, (Day(txtFaelligkeit2.Text)))
KapitalF4 = DateDiff("m", (CDate(plusEinMonat)), (CDate(txtBeginnVerzinsung.Text))) * txtEuroFaelligkeit2.Text
KapitalF = KapitalF1 + KapitalF2 + KapitalF3 + KapitalF4
End If
If CDbl(txtEuroFaelligkeit2.Text) = 0 Then
KapitalF1 = DateDiff("m", (CDate(txtFaelligkeit1.Text)), (CDate(txtFaelligkeit2.Text))) * txtEuroFaelligkeit1.Text
Tage = Day(txtFaelligkeit2.Text) - 1
KapitalF2 = (Round(txtEuroFaelligkeit1.Text / Monatstage(txtFaelligkeit2.Text) * Tage, 2))
KapitalF = KapitalF1 + KapitalF2
End If
End If
End If


Ich bin für alle Tips und Tricks und Hinweise dankbar!
Liebe Grüße aus Würzburg
Anna



10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Optimierung von VBA-Code
19.02.2003 16:37:40
Nike

Hi,

könntest du ne Beispieldatei dazu ins Netz stellen?

Bye

Nike

Wie stell ich das ins Netz? oT
19.02.2003 17:20:31
Anna



Re: Optimierung von VBA-Code
19.02.2003 18:09:58
gordon

Hallo Anna,

sofern Du mehrfach z.B. mit txtEuroFaelligkeit2.Text 'rechnest' solltest Du vorher einmalig den Text in eine korrekt dimensionierte Variable umwandeln. Warum z.B. nicht CDbl(txtEuroFaelligkeit2.Text) einer Dbl-Variablen zuweisen ?

Gruß
gordon

Re: Optimierung von VBA-Code
19.02.2003 20:11:32
Hans W. Hofmann

Hallo Anna,

es mal eine gute Idee hier unter Features nachzulesen, wei man Code vernüftig aufbereitet ins Forum stellt.
Prinziell farg ich einfach mal welchen Sinn diese Abfrage-Orgien haben. Auf die Schnelle kann keine verbotenen Rechenoperationen erkennen, die das nötig machen (kann aber täuschen). Dann würde ich nur mal zwecks Übersichtlichkeit die ganzen Forms.Text in richtig geDim'te Variablen ablegen und nicht zig mal Casten.
UNd weiter würde ich alle notwendigen Gültigkeitüberprüfungen aus der Prozedur raus nahmen und im Changeereignis der entsprechenden Form erschlagen!

Ein besonderes Leckerli ist die Multiplikation von Text...

Gruß HW


Anzeige
Re: Optimierung von VBA-Code
19.02.2003 20:37:53
Anna


Hallo Hans,
vielen Dank für deine aufmunternden Worte! Dazu möchte ich folgendes sagen: Zum ersten, auch wenn der Code hier ohne Einrückungen dargestellt wird, ändert dies nichts daran, dass er strukturiert aufgebaut und nachvollziehbar ist. Der Sinn dieser Abfrageorgie ergibt sich aus meinem Text. Die Abhängigkeiten der Daten in den vorhergehenden Textboxen bis zum Beginn des eigentlichen Verzinsungszeitraumes habe ich mir nicht gewünscht; ich muss damit arbeiten! Wenn du so nett wärst und mir erklären würdest, wie man die ganzen "Forms.Text in richtig geDim'te Variablen" ablegt, was du unter "zig mal Casten" verstehst und wie ich "alle notwendigen Gültigkeitüberprüfungen aus der Prozedur raus nahmen und im Changeereignis der entsprechenden Form erschlagen" wäre ich dir sehr verbunden. Ich mach mich schließlich auch nicht über deine miserable Schreibweise lustig. Das besonder Schmackerl der Multiplikation von Text ist hier nur nebensächlich und auch nicht Thema. Über einen konstruktiven Vorschlage oder den Hinweis auf ähnliche bereits besprochene Lösungsvorschläge bei solchen komplexen Abhängigkeiten würde ich mich sehr freuen.
Liebe Grüße
Anna

Anzeige
Re: Optimierung von VBA-Code
19.02.2003 21:00:20
Hans W. Hofmann

Ich will Dich nicht weiter mit meiner misserablen Schreibe belästigen.

Gruß HW

Schade, dass Höflichkeit nicht Pflicht ist! oT
19.02.2003 21:10:02
Anna



Re: Wie stell ich das ins Netz? oT
19.02.2003 23:00:37
GerdZ

Hallo Anna,

auf der Seite https://www.herber.de/forum/antworter/userfiles.htm kannst Du ein AddIn herunterladen, mit dem Du in Excel den UpLoad durchführen kannst.

Und bei den Forum-Features ist beschrieben, wie man VBA-Code in Forumsbeiträge einfügen kann.

Gruß
Gerd



Anzeige
Danke Gordon, ich mach heut noch mal einen Thread
20.02.2003 06:39:56
Anna




Danke für die Tips, kann im Büro nix downloaden!oT
20.02.2003 06:41:42
Anna



Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige