Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Ratoncito am April 05, 2022, 08:07:52

Titel: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am April 05, 2022, 08:07:52
Hallo,

auf einem Formular habe ich ein ungebundenes Textfeld. In diesem Feld möchte ich ein Datum im Format Tag/Monat abspeichern. Dieser Wert soll nach dem Schließen und erneutem Öffnen der DB wieder angezeigt werden.

Muss ich für diesen Wert extra eine Tabelle anlegen, oder gibt es eine andere Möglichkeit einen einzelnen Wert zu speichern?

Für Eure Hilfe im Voraus besten Dank - Wolfgang

Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: ebs17 am April 05, 2022, 08:25:44
Verwende einen Standardwert.
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am April 05, 2022, 08:58:55
Hallo,
Zitat von: ebs17 am April 05, 2022, 08:25:44Verwende einen Standardwert.
Der ist dann fest.
Ich möchte diesen Wert eingeben/ändern und beim nächsten Öffnen der DB wieder anzeigen.

Gruß - Wolfgang
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: ebs17 am April 05, 2022, 09:10:33
Dann bleibt nur der Weg eines Tabellenfeldes, das einen Wert SPEICHERN kann. Du musst dann für einen gewollten Austausch mit dem Formularfeld sorgen.

Tabellenfeld wäre jetzt das naheliegende. Selbstredend könnte man auch eine Textdatei irgendwo auf der Festplatte, die Registry oder irgendetwas anderes verwenden.
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am April 11, 2022, 13:29:33
Hallo,

ich habe nun für den Wert des Textfeldes txtOKbis eine Tabelle erstellt.

Tabelle: tblOKbis
Feld: OKbis
Format: tt.mm.

Zum Probieren habe ich dort einen Wert (05.12.) gespeichert. Dieses Datum wird auch korrekt angezeigt. Geholt wird es über:

Me.txtOKbis = DLast("OKbis", "tblOKbis", "ID=1")
Nun meine Probleme:

Anzeigen und Eingeben möchte ich im Format tt.mm.
Dieses Format habe ich sowohl in der Tabelle, wie auch im Textfeld vorgegeben. Allerdings gibt es bei der Eingabe immer eine Fehlermeldung "Falsches Format"
Access besteht auf die komplette Eingabe mit Jahr.

Was muss ich wo ändern, damit eine Eingabe tt.mm. (das Jahr wird nicht benötigt) akzeptiert wird?
Wie ändere bzw. aktualisiere ich den dieses Datum im Feld OKbis in der tblOKbis über VBA?

Vielen Dank für Eure Hilfe - Wolfgang
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Beaker s.a. am April 11, 2022, 13:43:55
Hallo Wolfgang,
Zitateinen Wert (05.12.) gespeichert. Dieses Datum
Das ist kein Datum. Ein Feld mit dem Datentyp "DateTime" verlangt
immer auch eine Jahreszahl. Wie du dieses komplette Datum dann
anzeigst steht auf einem anderen Blatt, will sagen, das bleibt dir
überlassen.

gruss ekkehard
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: DF6GL am April 11, 2022, 13:52:44
Hallo,

da ist wohl einiges durcheinander...


Du sprichst von "Datum",  "05.12." ist aber kein Datum, sondern eine Zeichenfolge, sprich String (Text).  Bei einer Tabelle kommt es auch nicht auf das "Format" an, wichtig ist der Datentyp (sollte eigentlich zwischenzeitlich bekannt sein).

Du solltest Dir überlegen, ob mit einem "richtigen" Datum  (Datentyp Datum/Uhrzeit) oder mit lediglich einem Text ( Datentyp Kurzer Text)  gearbeitet werden soll/muss.

Beim Beispiel (Text) ist wegen Vermeidung von Tippfehlern anzuraten, den Tag und den Monat mit Hilfe zweier Kombis auszuwählen und zu einem passenden String zusammenzusetzen:

(prinzipiell)
Dim strBis As String
strBis = Me!KombiTage & "." & Me!KombiMonate & "."

und diesen String abzuspeichern.



Als noch nicht erwähnte Methode könnte für den dauerhaft zu speichernden Wert auch eine Anwender-definierte Eigenschaft (user defined property) herangezogen werden.

Zum Code

Me.txtOKbis = DLast("OKbis", "tblOKbis", "ID=1")
Was bezweckst Du mit "DLast"? 

Von einem ID-Feld in der Tabelle hast Du nicht gesprochen. Wenn es nur einen DS in der Tabelle gibt, ist der Where-Condition-Parameter ("ID=1") überflüssig.  Zudem wäre Dlookup die "passendere" Funktion.
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: ebs17 am April 11, 2022, 20:00:54
Denkfrage:
Zitatdas Jahr wird nicht benötigt
Deine Anwendung ist eine zum baldigen Wegwerfen?
Denn bei etwas längerfristigem Gebrauch kommt ein Datum jedes Jahr wieder, und da ist so eine bessere Qualifizierung so unangenehm nicht.

Nebenbei ergeben Sortieren und ein Max bei einem Datum erwartete Ergebnisse. Wenn dein Format tt.mm als Text geführt wird, gibt es da abweichend "Überraschungen".
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am April 12, 2022, 08:41:58
Hallo,

vielen Dank für die Antworten.

Zitat von: ebs17 am April 11, 2022, 20:00:54Deine Anwendung ist eine zum baldigen Wegwerfen?
Denn bei etwas längerfristigem Gebrauch kommt ein Datum jedes Jahr wieder, und da ist so eine bessere Qualifizierung so unangenehm nicht.

Warum etwas direkt als Müll bezeichnen? Es gibt auch Dinge, die jedes Jahr zum gleichen Termin stattfinden. Da spielt die Jahreszahl keine Rolle und kann bis in alle Ewigkeit gültig sein.

Ich werde den Wert als Text verarbeiten.

Danke für den Hinweis auf DLookup. ID ist später hinzugekommen um den Datensatz beim Speichern zu definieren. Sorry, bin leider nicht so sicher bei dem was nötig ist, und was nicht.

Zitat von: DF6GL am April 11, 2022, 13:52:44Als noch nicht erwähnte Methode könnte für den dauerhaft zu speichernden Wert auch eine Anwender-definierte Eigenschaft (user defined property) herangezogen werden.

Das wäre wohl das, nach dem ich zu Beginn gefragt habe. Es sah aber so aus, dass es nur über eine Tabelle möglich ist.

Zitat von: ebs17 am April 05, 2022, 09:10:33Dann bleibt nur der Weg eines Tabellenfeldes, das einen Wert SPEICHERN kann. Du musst dann für einen gewollten Austausch mit dem Formularfeld sorgen.

Zu "Anwender-definierte Eigenschaft" finde ich leider nur recht umfangreiche Beschreibungen, die ich nicht umsetzen kann.
Wie lautet der Code, wenn ich nach einer Änderung des Textfeldes txtOKbis den Inhalt als Eigenschaft zum nächsten Öffnen der DB verwenden möchte?

Vielen Dank für Eure Hilfe - Wolfgang
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: ebs17 am April 12, 2022, 09:07:32
ZitatEs gibt auch Dinge, die jedes Jahr zum gleichen Termin stattfinden.
In der Realität der eigene Geburtstag, Neujahr und Weihnachten und ein paar weitere Gedenk- und Feiertage.

Die meisten gängigen eigenen Termine sind aber wochen- und feiertagsbeeinflusst und damit eher weniger konstant.
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: DF6GL am April 12, 2022, 09:52:19
Hallo,


Thema Property:


Kopiere den folgenden Code in ein Standardmodul:


Option Compare Database
Option Explicit



Function SetProperty(ByVal Name As String, ByVal Value As String)
 
'Erzeugen einer Text-Property (Name) und speichern des Strings (Value) in der Property

Dim DB As DAO.Database
  Dim prpProp As DAO.Property

  Set DB = CurrentDb
  On Error GoTo SetProperty_Error
  Set prpProp = DB.CreateProperty(Name, dbText, Value)
  DB.Properties.Append prpProp

SetProperty_Exit:
Set DB = Nothing
  Exit Function

SetProperty_Error:
  If Err.Number = 3367 Then
    DB.Properties(Name) = Value
  Else
    MsgBox "SetProperty: " & _
           Err.Number & ": " & Err.Description, vbCritical, "Property Error"
  End If
  Resume SetProperty_Exit:
End Function





Function GetProperty(ByVal Name As String)

' Auslesen des Wertes aus einer Property (Name)

  Dim DB As DAO.Database
If Len(Name) = 0 Then Exit Function
  Set DB = CurrentDb
  On Error Resume Next
  GetProperty = DB.Properties(Name)
End Function


Die Anwendung (Aufruf) der beiden Funktionen solltest Du aber alleine hinbekommen.


Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am April 14, 2022, 16:00:46
Hallo,

Zitat von: DF6GL am April 12, 2022, 09:52:19Die Anwendung (Aufruf) der beiden Funktionen solltest Du aber alleine hinbekommen.

Nein, den Aufruf bekomme ich nicht hin.

Ich habe ein Modul modOKbis erstellt, den Code dort hineinkopiert und an meinen Zweck angepasst. Alle meine Versuche scheitern, da ich den Ablauf nicht verstehe.
Als erstes wollte ich lediglich den String "03.05" an das Textfeld übergeben. Selbst das bekomme ich nicht hin.

txtOKbis ist das Textfeld auf dem Formular und
okBis soll die Text-Property sein.

'Function SetProperty(ByVal Name As String, ByVal Value As String)
Function SetProperty(ByVal OKbis As String, ByVal Value As String)
'Erzeugen einer Text-Property (Name) und speichern des Strings (Value) in der Property

Dim DB As DAO.Database
Dim prpProp As DAO.Property

  Set DB = CurrentDb
  On Error GoTo SetProperty_Error
'  Set prpProp = DB.CreateProperty(Name, dbText, Value)
  Set prpProp = DB.CreateProperty(OKbis, dbText, "03.05.")
  DB.Properties.Append prpProp

SetProperty_Exit:
Set DB = Nothing
  Exit Function

SetProperty_Error:
  If Err.Number = 3367 Then
'    DB.Properties(Name) = Value
    DB.Properties(OKbis) = "03.05."
  Else
    MsgBox "SetProperty: " & _
           Err.Number & ": " & Err.Description, vbCritical, "Property Error"
  End If
  Resume SetProperty_Exit:
End Function

'Function GetProperty(ByVal Name As String)
Function GetProperty(ByVal OKbis As String)
' Auslesen des Wertes aus einer Property (Name)

  Dim DB As DAO.Database
'If Len(Name) = 0 Then Exit Function
If Len(OKbis) = 0 Then Exit Function
  Set DB = CurrentDb
  On Error Resume Next
'  GetProperty = DB.Properties(Name)
  GetProperty = DB.Properties(OKbis)
End Function

An den angepassten Stellen habe ich die Originalzeile auskommentiert und darunter die von mir abgeänderte Zeile gesetzt.

Für Eure Hilfe im Voraus besten Dank - Wolfgang
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: DF6GL am April 14, 2022, 17:01:45
Hallo,


"aufrufen einer Funktion heißt doch nicht, einfach die Namen irgendwelcher Variablen zu ändern...


(Auch wenn es trotzdem funktionieren sollte, wenn alle entspr. Codestellen  geändert würden)


Wirf erst mal die Änderungen weg und kopiere die Funktionen aus meinem letzten Beitrag wie dort beschrieben.



Dann rufe die Funktionen so auf:
(und das macht man dort, wo man sie braucht..)

Schreiben eines Textes in die Property:

Sub OKbis_Afterupdate()
  SetProperty "OKbis", Me!OkBis
End Sub


und auslesen:

Sub btnLeseProp_Click()
MsgBox GetProperty ("OkBis")
End Sub
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am April 15, 2022, 12:11:20
Hallo,

@franz

Vielen Dank für das vorgezogene Osterei :-)

Den Code habe ich noch ein wenig an meine Wünsche angepasst, denn ich benötige keine MsgBox, sondern der Wert wird über ein Textfeld angezeigt und geändert. Alles funktioniert nun so, wie ich mir das gewünscht habe - Danke.

Noch ein paar Anmerkungen:
Viele Dinge, die für Euch ganz geläufig sind bedeuten für mich absolutes Neuland. Property habe ich noch nie verwendet.
Daher bin ich bei dem Code davon ausgegangen, dass er noch an den richtigen Stellen an meine DB angepasst werden muss. Bei "Name" bin ich z.Bsp. davon ausgegangen, dass ich hier den von mir gewünschten Namen eintragen muss...

Tja und bei Datum - das ist ein ganz besonderes Ding und hier hat Access eine ganze Reihe Überraschungen bereit. Immer eine gute Gelegenheit, um ins Fettnäpfchen zu treten.

Bei mir handelt es sich im speziellen Fall um Zinstermine für Wertpapiere. Je nach Wertpapier gibt es davon eine unterschiedliche Anzahl pro Jahr und zu immer wiederkehrenden Terminen im Jahr. Das hat mir schon an anderen Stellen genug Kopfzerbrechen bereitet. Der von mir benutzte Wert soll eigentlich nur eine Info für mich sein, bis zu welchem Tag ich die Termine schon kontrolliert habe. Ein String reicht dafür volkommen aus, aber ich habe da noch ein paar Ideen im Hinterkopf, für die der Wert als Datum besser geeignet wäre. Daher hatte ich dieses Format gewählt.
In der Tabelle mit den Daten der Wertpapiere habe lediglich die Anzahl und den ersten Zinstermin gespeichert. Der Rest wird wenn benötigt berechnet. Und diese Termine sind in der Vergangenheit und Zukunft immer an den gleichen Terminen im Jahr. Die Jahreszahl ist da eher hinderlich.
Auch wenn es nicht direkt ersichtlich ist, habe ich schon einige Überlegungen dazu angestellt.

Nochmals vielen Dank und allen ein schönes, und vor allen Dingen friedliches Osterfest - Wolfgang

PS
Wo ist eigentlich der "sag Danke Knopf"?
Und "Thema gelöst" sehe ich auch nicht!?!
Die Brille habe ich aber auf :-)
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Beaker s.a. am April 15, 2022, 14:10:28
ZitatDie Jahreszahl ist da eher hinderlich.
Nein, nein, nein, ein Datum ist ein Datum, ist ein Datum, ist ein Datum.

Auch wenn die Termine (Tag+Monat) immer gleich sind, so verändert
sich doch die Ausschüttung, - die erfasst du doch? Wie willst du aber
ohne Jahreszahl jemals eine Entwicklung ableiten (Jahres-, 5Jahres-
Vergleiche u.ä.)?
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am April 15, 2022, 18:51:50
Hallo,

Zitat von: Beaker s.a. am April 15, 2022, 14:10:28
Zitat von: undefinedDie Jahreszahl ist da eher hinderlich.
Nein, nein, nein, ein Datum ist ein Datum, ist ein Datum, ist ein Datum.

Auch wenn die Termine (Tag+Monat) immer gleich sind, so verändert
sich doch die Ausschüttung, - die erfasst du doch? Wie willst du aber
ohne Jahreszahl jemals eine Entwicklung ableiten (Jahres-, 5Jahres-
Vergleiche u.ä.)?

Ja, aber...

Im Prinzip hast Du vollkommen recht, aber in diesem konkreten Fall nicht so ganz. Auf diesem Formular werden mir alle Zinstermine und Beträge der im Bestand befindlichen Wertpapiere für das laufende Jahr zur Kontrolle in einem Unterformular angezeigt. Nun kann ich eines dieser Wertpapiere aufrufen und alle zu diesem Wertpapier getätigten Transaktionen werden in einem anderen Unterformular angezeigt.
Es dient mir lediglich zur Kontrolle, ob die Zahlungen erfolgt sind oder nicht.

Die tatsächlichen Erträge bzw. Transaktionen werden selbstverständlich separat gebucht und dem entsprechenden Wertpapier zugeordnet. Auf anderen Formularen und Berichten wird mir die Entwicklung und die bereits erzielten Gewinne / Verluste angezeigt. Für die verkauften Werte habe ich ebenfalls die erzielten Gewinne oder Verluste. Aber das hat mit dem aktuell angesprochenen Formular nichts zu tun.

Was mich tatsächlich brennend interessieren würde ist die real erzielte Rendite. Hierfür habe ich keinen praktikablen Lösungsansatz. Etwas kaufen und nach x Tagen wieder verkaufen und aus der Differenz zwischen Kauf- und Verkaufspreis und der Zeit dazwischen die Jahresrendite zu errechnen ist kein Problem. Aber es gibt auch Mehrfachkäufe, Teilverkäufe und gezahlte Zinsen. Man müsste ermitteln, welcher Betrag für welchen Zeitraum eingesetzt wurde, um daraus die Rendite zu berechnen. Berechnen könnte ich das, aber das in Access umzusetzen, da bin ich absolut überfordert.

Nochmals vielen Dank an alle die sich hier eingebracht haben und schöne Ostern - Wolfgang
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am April 17, 2022, 13:23:57
Hallo,

das Thema um das Textfeld und Format Datum beschäftigt mich immer noch. Daher hätte ich gerne gewusst, wie man es richtig macht.
Alle grundlegenden Daten zu einem Wertpapier sind in einer Tabelle gespeichert, die dazugehörigen Transaktionen in anderen.
Zu den grundlegenden Daten gehören zum Beispiel:
Wertpapierkennnummer
Name
Kupon
Anzahl der Zinstermine
erster Zinstermin

Die jeweiligen Zinstermine sind abhängig von der Anzahl (1 - 2 - 3 - 4 - 6 oder 12) und dem ersten Zinstermin im Jahr.

Wenn ich richtig informiert bin, sollen keine berechneten Daten in Tabellen gespeichert werden. Daher habe ich die Anzahl der Zinstermine und den ersten Zinstermin gespeichert. Alle weiteren Zinstermine werden bei Bedarf berechnet.

Die Zinstermine haben mir mal ziemliche Probleme bereitet. Ich habe einen Weg gefunden, mit dem ich zurechtkomme.

Jetzt hätte ich gerne gewusst, wie und in welchem Format man Anzahl und den ersten Zinstermin speichert und die eventuell auftretenden Probleme beseitigt.

Vielen Dank für Eure Hilfe - Wolfgang
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: ebs17 am April 17, 2022, 15:35:32
ZitatWas mich tatsächlich brennend interessieren würde ist die real erzielte Rendite.
Renditerechnung von beliebigen Zahlungsplänen (https://www.ms-office-forum.net/forum/showthread.php?t=356712)
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: ebs17 am April 17, 2022, 15:46:20
Zitatwie und in welchem Format man Anzahl und den ersten Zinstermin speichert
Eine Möglichkeit wäre es, eine Tabelle zu verwenden, die sich an den Argumenten von DateAdd orientiert. Dann kann man nämlich recht einfach über eine Zahlenhilfstabelle (https://www.ms-office-forum.net/forum/showthread.php?t=298414) Folgetermine in einer Abfrage hochrechnen.
Siehe WartungsPlanung (https://www.ms-office-forum.net/forum/showpost.php?p=2067364&postcount=4)
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am April 25, 2022, 09:31:32
Hallo,

mit dem Startthema hat es eigentlich nichts mehr zu tun, trotzdem ein kurzes Update.

Zitat von: ebs17 am April 17, 2022, 15:35:32
Zitat von: undefinedWas mich tatsächlich brennend interessieren würde ist die real erzielte Rendite.
Renditerechnung von beliebigen Zahlungsplänen (https://www.ms-office-forum.net/forum/showthread.php?t=356712)

Ja, viel eleganter hätte ich es auch nicht hinbekommen :-)

Spaß bei Seite, das Kontomodell mit Ein- und Auszahlungen ID 5 ist genau das, was ich benötige.

In meiner DB gibt es praktisch nur Kontomodell 5, allerdings mehrfach, für jedes Wertpapier eins.

Um die Berechnung für meine Zwecke zu nutzen musste ich "nur noch" die benötigten Daten bereitstellen und SQL-Anweisungen an den richtigen Stellen anpassen. Mit meinen Kenntnissen eine gewaltige Aufgabe, die nach unzähligen vergeblichen Anläufen endlich geklappt hat. Bleibt noch die Integration in meine DB.

Da Du den Code veröffentlichst gehe ich davon aus, dass ich ihn in meiner rein privaten DB verwenden darf?

Vielen Dank und einen guten Start in die neue Woche - Wolfgang

PS Den Knopf "Thema gelöst" habe ich immer noch nicht entdeckt

Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am Mai 04, 2022, 17:59:54
Hallo,

ich habe mich intensiver mit der Renditeberechnung beschäftigt und die Funktion auf einem Formular verwendet. Das funktioniert einwandfrei.

Nun möchte ich die Funktion auch auf einem anderen Formular mit anderen Werten anwenden. Dabei habe ich einige Fragen.

Im Code gibt es folgenden Aufruf:
If Me.cboAuswahl > 0 Then Me.txtRendite = InterestRate(Me.cboAuswahl, _
                                                           Me.txtStichtag, _
                                                           Me.cboAuswahl.Column(2), _
                                                           Me.txtGuthaben, _
                                                           0)

Hier ist ein IF-Block ohne End IF.
Ist das Absicht? Habe ich bis jetzt so noch nicht gesehen.

Wozu dient der Aufruf Me.cboAuswahl in der ersten Zeile?
Meine Daten stehen in diesem Formular in anderen Feldern, daher möchte ich den Aufruf anpassen und habe Probleme mit der ersten Zeile.

Vielen Dank für Eure Hilfe - Wolfgang
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: ebs17 am Mai 05, 2022, 10:26:09
Wenn die IF-Anweisung einzeilig ist, braucht man von der Syntax her kein End If.

ZitatWozu dient der Aufruf Me.cboAuswahl in der ersten Zeile?
Eine Rechnung macht nur Sinn, wenn sie für ein vorhandenes Konto ausgeführt wird, in dem es Zahlungen und auch Guthaben gibt, siehe Datenherkunft der ComboBox.
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am Mai 05, 2022, 12:12:51
Hallo,
Zitat von: ebs17 am Mai 05, 2022, 10:26:09Wenn die IF-Anweisung einzeilig ist, braucht man von der Syntax her kein End If.
Danke für die Info.

Zitat von: ebs17 am Mai 05, 2022, 10:26:09Eine Rechnung macht nur Sinn, wenn sie für ein vorhandenes Konto ausgeführt wird, in dem es Zahlungen und auch Guthaben gibt, siehe Datenherkunft der ComboBox.

Ja, auch das ist mir klar und habe ich in einem Formular so verwendet. Dort geschieht die Auswahl über eine ComboBox. Die und die nötigen Abfragen haben ich angepasst. Das hat funktioniert.

Nun möchte ich auf einem anderen Formular als ersten Schritt die aktuelle Rendite aller Transaktionen über die gesamte Zeit anzeigen. Später auch die des aktuellen Jahres. Eine Auswahl über eine ComboBox ist dafür nicht nötig, da die benötigten Daten entweder auf dem Formular schon vorhanden sind, oder in einer Abfrage bereitstehen.

Ich finde leider nicht den richtigen Bezug zwischen der Codezeile mit der die Berechnung ausgeführt wird und dem VBA-Code vermutlich im Modul modRendite. Da hakt es leider bei mir gewaltig.

Über Hilfe würde ich mich freuen.

Liebe Grüße - Wolfgang
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: ebs17 am Mai 05, 2022, 12:37:20
Wenn alle nötigen Daten vorhanden sind, muss man nicht prüfen, ob man rechnen will.

Die Berechnung selber ist eine Funktion, die man auch hier vermutlich sogar in einer Abfrage aufrufen könnte (habe ich noch nicht probiert), also alle Konten auf einmal. Man muss nur vorher die nötigen Argumente bereitstellen.

Public Function InterestRate(ByVal Account As Long, _
                             ByVal DateYieldAnalysis As Date, _
                             ByVal StartYieldAnalysis As Date, _
                             ByVal CreditOnDateYieldAnalysis As Variant, _
                             ByVal CreditOnStartYieldAnalysis As Variant, _
                             Optional ByVal TerminationDifference As Double = 0.01) _
                             As Variant
'// --------------------------------------------------------------------------------------------------------------------------
'// Methode:   | Errechnung Rendite aus Zahlungsplan und einem resultierenden Guthaben
'// --------------------------------------------------------------------------------------------------------------------------
'// Parameter: | Account ... Schlüssel als Long, der das betrachtete Konto in tblZahlungen identifiziert
'//            | DateYieldAnalysis ... Stichtag, zu dem die Ermittlung der Rendite erfolgt
'//            | StartYieldAnalysis ... Starttag für den Zeitraum, der die betrachteten Zahlungen enthält
'//            | CreditOnDateYieldAnalysis ... vorhandenes Guthaben zum Stichtag
'//            | CreditOnStartYieldAnalysis ... Vor-Guthaben zum Starttag
'//            | TerminationDifference ... Abbruchbedingung für Dezimalstellengenauigkeit
'// --------------------------------------------------------------------------------------------------------------------------
'// Rückgabe:  | Zinssatz als Double bei Erfolg, bei Fehler Null
'// --------------------------------------------------------------------------------------------------------------------------
'// Autor:     | ebs17
'// --------------------------------------------------------------------------------------------------------------------------
'// Verfahren: | Zur Berechnung der resultierenden Rendite werden alle Zahlungen zwischen Starttag (StartYieldAnalysis)
'//            | und Stichtag (DateYieldAnalysis) auf das Konto und abgehend vom Konto mit einem Tageszins abgezinst
'//            | auf einen Barwert zum Starttag.
'//            | Das entstandene Guthaben zum Stichtag (CreditOnDateYieldAnalysis) wird mit dem gleichen Zinssatz abgezinst
'//            | auf den Barwert zum Starttag. Ist die Differenz aus Summe der Barwerte der Zahlungen und des Barwertes aus
'//            | dem Guthaben gleich 0, entspricht der verwendete Zins dem gesuchten Zinssatz.
'//            | Der Zins wird durch Iteration ermittelt. Gerechnet wird mit einem Tageszinssatz mit dem mathematischen Fehler
'//            | unberücksichtigter Schalttage bei der Zinsermittlung des Tageszinses.
'// --------------------------------------------------------------------------------------------------------------------------

' ...

Was daran ist nicht verständlich?
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am Mai 24, 2022, 16:57:31
Hallo,

eigentlich hat es nichts mehr mit dem Ausgangsthema zu tun. Vielleicht kann ein Moderator diesen Beitrag mit dem Link zur DB mit der Renditeberechnung von ebs17 (im Beitrag #17) in ein neues Thema verschieben?

@ ebs17

Die Renditeberechnung gefällt mir außerordentlich gut. Ich verwende sie etwas abgewandelt auf einem Formular mit Informationen zu einzelnen Wertpapieren.

Gerne würde ich eine Renditeberechnung auf einem anderen Formular gleich mehrfach für verschiedene Zeiträume einsetzen.
Auf diesem Formular werden mir der Kontostand, die Kurse und Werte meiner im Bestand befindlichen Wertpapiere im Verlauf einer Woche (5 Werktage), 2 Wochen zurück und die Werte 3 Monate zurück angezeigt.
Gerne würde ich die Rendite zwischen diesen Terminen, seit Jahresbeginn und seit Eröffnung des Depots anzeigen.

Hierbei habe ich Probleme mit der Bereitstellung der Daten und der Übergabe der Parameter zur Berechnung.

In einem Bericht zeige ich den erzielten Gewinn/Verlust je verkauften Wertpapiere an. Auch hier wäre es schön, wenn man für jedes einzelne Wertpapier die erzielte Rendite pro Jahr anzeigen könnte.

Über Hilfe bei der Umsetzung würde ich mich freuen.

Liebe Grüße - Wolfgang
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am Mai 31, 2022, 14:28:57
Hallo,

im Anhang ist eine etwas abgewandelte DB die auf der Renditeberechnung von ebs17 aufbaut.

Mein Wunsch ist eine gleichzeitige Renditeberechnung zu unterschiedlichen Terminen. Dazu habe ich das Formular ein wenig abgeändert.

Das Feld zur Anzeige der Rendite ist mehrfach vorhanden, die Termine für die unterschiedlichen Stichtage sind im Feld davor angegeben.

Die getätigten Zahlungen sind in der qryRendZahlung. Da es sich um Wertpapiere handelt ist das Guthaben zum Stichtag ein Produkt aus "Bestand am Stichtag" * "Kurs am Stichtag". Die Käufe und Verkäufe sind in in der tblRendBewegung. Hieraus muss der Bestand zum Stichtag ermittelt werden.

An der ursprünglichen Form der Berechnung über Auswahl über das cbo und Anzeige der Berechnung im Feld Rendite habe ich nichts geändert, wird aber in neuen Formular nicht benötigt.

In meiner DB existiert in dem Formular kein cbo zur Auswahl und die Gesamtrendite für alle Konten sollte bei Klick auf den Button für die Felder Rendite2 bis 5 zu den jeweiligen Stichtagen davor angezeigt werden.

Ich hoffe, dass das möglich ist.

Als nächsten Schritt könnte ich mir noch eine Erweiterung vorstellen, in der die Rendite jedes einzelnen Wertpapiers angezeigt wird.


Für Hilfe inm Voraus besten Dank - Wolfgang


Rendite alle Konten.mdb
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: ebs17 am Mai 31, 2022, 22:10:39
Meine erste Erwartung ist, wenn da einige mir nicht vertraute Tabellen auftreffen, dass ich diese im Beziehungsfenster wiederfinde, damit ich auf einen Blick Zusammenhänge erfassen kann.
Ist das nicht so und also umständlicher, ist das ein guter Grund, gleich wieder abzuschalten.
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Beaker s.a. am Juni 01, 2022, 11:16:51
Hallo Wolfgang,
ZitatIn meiner DB existiert in dem Formular kein cbo zur Auswahl und die Gesamtrendite für alle Konten sollte bei Klick auf den Button für die Felder Rendite2 bis 5 zu den jeweiligen Stichtagen davor angezeigt werden.
Das ist genau das, was Eberhard dir hiermit aufgezeigt hat
ZitatDie Berechnung selber ist eine Funktion, die man auch hier vermutlich sogar in einer Abfrage aufrufen könnte (habe ich noch nicht probiert), also alle Konten auf einmal. Man muss nur vorher die nötigen Argumente bereitstellen.

gruss ekkehard
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am Juni 01, 2022, 11:43:59
Hallo,

sorry, an die Beziehungen habe ich im Beispiel nicht gedacht.

In meiner DB habe ich die Berechnung an meine Daten angepasst und in ein Formular mit cbo eingebaut. Das habe ich gerade noch so hinbekommen.

Bei allen weiteren Versuchen die Gesamtrendite auf einem Formular zu unterschiedlichen Terminen oder in einem Bericht für mehrere WePas gleichzeitig anzuzeigen bin ich kläglichst gescheitert.

Ich mache das Beispiel neu.

Gruß - Wolfgang
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am Juni 01, 2022, 13:34:42
Hallo,

ich habe in der DB die Tabellen aus meiner DB eingefügt und die Daten angepasst. Einige Tabellen haben daher andere Namen.
Auf dem frmRenditeberechnung habe ich einige Felder gelöscht.


Original             neueDB

tblKonten           tblWePa
tblZahlungen     tblKonto
tblGuthaben      nicht vorhanden, das Guthaben muss aus Bestand und Kurs zum Stichtag berechnet werden
                            tblBewegung Veränderungen im Bestand eines WePas

Die qryRendZahlungen entspricht der tblKonto bzw. tblZahlungen in der Original-DB. Es wäre schön, wenn die Abfrage statt der Tabelle zur Berechnung verwendet wird, da in meiner DB die Zahlungen nicht direkt vorhanden sind und erst in der Abfrage bereitgestellt werden.

Für Eure Hilfe im Voraus vielen Dank - Wolfgang


Rendite alle Konten.mdb
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: ebs17 am Juni 01, 2022, 15:45:02
Dein Beziehungsbild ist für mich nicht schlüssig (und daher wenig brauchbar). Du hast pro Bewegung ein neues Konto statt ein Konto mit mehreren Bewegungen ...?

Zahlungen und Datum dazu würde ich in die tblBewegung verschieben, mit dem Datum dort hätte man überhaupt/einfach die Chance, ein Guthaben zu ermitteln, sofern der WP-Kurs zu diesem Tag  vorhanden ist, habe ich noch nicht überprüft. Zumindest gibt es nur Kurse für 4 und 5, was also in jedem Fall unvollständig ist.

Unvollständige Daten und dann eine Rendite auf mehrere Dezimalstellen zu rechen ... da lohnt nicht mal das Anfassen

In jedem Fall sollte man nicht die Stichtage, zu denen man Berechnungen anstellen will, im VBA-Code verstecken, sondern diese in einer Tabelle führen. So wären diese auswähl- und pflegbar, und für eine Abfrage ohne auszuführenden Doppelsalto einfach verwendbar.

Ach so: Die Fixierung auf Formular kannst Du runterfahren. Eine Abfrage sollte jenes nur zur entgültigen Darstellung benötigen. Zusätzlich berechnet eine richtige Abfrage alles (alle Konten zu allen Stichtagen), somit wäre eine zusätzliche Aufgabe eines Formulars die Einleitung einer zielführenden und praktischen Filterung auf genau Gewünschtes.


Nicht zuletzt: Ich möchte auf die Wiederholung von ekkehard hinweisen. Da gibt es eine Funktion, und die will mit den nötigen Argumenten gefüttert werden. Trage diese zusammen, dann kann man auch eine Abfrage wagen.
Dabei sollten die Argumente idealerweise einfach hergeleitet werden können, weil es sein könnte, dass sich die Funktion als aufwändig herausstellt und es bei vielfacher Wiederholung (viele Konten mit vielen Stichtagen) zu Laufzeitproblemen kommt. DAS hatte ich nicht probiert.

Wenn Du hier erwartest, dass Dir alles hier gemacht wird - übertreibe nicht die Hoffnung. Ich darf/muss Erdbeeren pflücken und essen. Da muss schon eine starke Motivation kommen, um davon abzulassen.
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: MzKlMu am Juni 01, 2022, 16:43:12
Hallo,
ohne da jetzt mitmischen zu wollen, aber die Beziehung über die ID's (ohne RI) zwischen tblKonto und tblWePa kann auch nicht stimmen. Man kann über 2 Autowerte keine sinnvolle Beziehung anlegen.
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am Juni 01, 2022, 18:20:46
Hallo,

ganz kurz eine Antwort zu den Beziehungen.

Diese DB benutze ich schon viele Jahre und es gab immer wieder Änderungen. Somit auch immer wieder neue Versionen. In der ältesten Version die ich noch habe sind die Beziehungen so, wie ich sie mal erstellt habe.

Irgendwann habe ich mal die Option Leistung bzw. Tabelle analysieren ausgeführt. Dabei gab es Vorschläge zur Optimierung und es wurden Tabellen indiziert. Anschließend gab es eine tblWePa_1 und eventuell auch die angesprochene Beziehung zwischen tblKonto und tblWePa. Die Kopie der tblWePa ist 100%ig nicht von mir hinzugefügt worden.

Seitdem habe ich nichts an den Beziehungen geändert. Wenn da irgendetwas nicht korrekt ist und geändert werden soll, kann ich das gerne machen.

@ebs17

Auf die anderen von Dir angesprochenen Punkte komme ich mich morgen zurück. Heute abend bin ich zum Sport.
Lass Dir die Erdbeeren schmecken.

Vielen Dank für Eure Mühen - Wolfgang

Beziehungen aktuell.jpg

Beziehungen alt.jpg
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: MzKlMu am Juni 01, 2022, 19:17:28
Hallo,
eine Beziehung über 2 Autowert ID's ist völlig unbrauchbar, weil es auf Dauer nicht gelingt die beiden Autowert ID' synchron zu halten. Die beziehung macht auch keinen Sinn, also entfernen. Ich kann mir auch nicht vorstellen, dass die automatisch so angelegt wurde.
Die eine tblWePa_1 kannst Du im Beziehungsbild entfernen (erst die Beziehung markieren und löschen). Und dann hast Du wieder Dein altes Beziehungsbild.
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Beaker s.a. am Juni 02, 2022, 12:11:39
Hallo,
Das zuletzt gezeigte "Beziehungen alt" geht doch schon in die richtige Richtung.
Ich hatte mir gestern Nachmittag das Beispiel aus #29 heruntergeladen und
ähnliches erstellt (siehe Abb.). Musste dann aber weg und konnte es nicht mehr
posten.
Da sind jetzt allerdings nur die Felder aus dem Beispiel drin. Bei den neuen kenne
ich die Inhalte nicht, denke aber das in die tblKonten kein Betrag gehört. Das müsste
eher ein berechnetes Feld in "tblBewegungen" sein. Ich habe das aber nicht umgesetzt,
da es ja sein kann, das der gebuchte Betrag von der Berechnung (Anzahl*Kurs) abweicht
(z.B. durch den Abzug von Gebühren). Das Feld "DatumKonto" kann ich nicht deuten.
Ein Bewegungsdatum darf es auf jeden Fall nicht sein.
Aus der tblBewegungen kann man damit m.E. alle Berechnungen ableiten.

gruss ekkehard
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am Juni 02, 2022, 16:13:03
Hallo,

die angesprochene Beziehung habe ich entfernt.

In der tblKonto werden alle Geldbewegungen gespeichert. Darunter sind neben Ein- und Auszahlungen auch weitere allgemeine Kosten, die nicht einem Wertpapier zugeordnet werden können, aber die Gesamtrendite des Depots beeinflussen.  Alle Beträge zu einem Wertpapier wie Kauf, Verkauf, Dividenden, Zinsen und Steuern, werden diesem zugeordnet. Die Anzahl bei Kauf, Verkauf und Zinszahlungen in Obligationen werden dabei in der tblBewegung gespeichert.

In der tblKurs sind zu 22Terminen für 5 Wertpapiere Kurse vorhanden, insgesamt 110 Datensätze. Da fehlt nichts.

Die Felder für Termine habe ich über VBA zugewiesen damit sichergestellt ist, dass zu diesen Terminen auch Kurse vorhanden sind. Das Formular dient lediglich als Beispiel. In der DB, in der es angewendet werden soll, werden diese durch andere Vorgaben auf diesem Formular bereitgestellt.

Vor einigen Wochen habe ich mir Deine (ebs17) DB zur Renditeermittlung angesehen. Die Bereitstellung dort erfolgt über ein cbo und einige Abfragen. So wie es dort aufgezeigt wird verwende ich es mittlerweile auf einem Formular, auf dem zusätzlich alle wichtigen Daten zu einem einzelnen Wertpapier angezeigt werden. Das habe ich nach unzähligen Versuchen erfolgreich hinbekommen.

So interessant und wichtig diese Information für ein einzelnes Wertpapier auch ist, viel mehr interessiert mich die Entwicklung meines gesamten Depots für unterschiedliche Zeiträume. So zum Beispiel zum Vortag, Vormonat, im laufenden Jahr und seit der Eröffnung.

Welches der beste Weg zur Bereitstellung und Berechnung der unterschiedlichen Renditen ist, kann ich nicht beurteilen. Die Endtermine stehen jedenfalls auf einem Formular, auf dem auch am Ende die Rendite zu diesem Termin angezeigt werden soll.

Und noch eine kleine Anmerkung, wenn ich erwarten würde, dass mir hier alles gemacht würde, dann hätte ich meine DB hier eingestellt und nur meine Wünsche angegeben.

Ich weiß die hier angebotene Hilfe durchaus zu schätzen und bin auch sehr dankbar dafür. Wenn Ihr irgendwelche Fleißarbeiten zu erledigen habt, nur her damit, ich werde mich revanchieren.

Und ja, ich habe mich schon unzählige Stunden an dieser Aufgabe abgerackert, der einzige Erfolg sind einige vom Haare raufen ausgefallene graue Haare, und ein paar Abdrücke mehr meiner Zähne in der Tischkante.

Für Hilfe jeglicher Art im Voraus besten Dank - Wolfgang

Rendite alle Konten 01.mdb

PS noch eine Bitte
Verwendet bitte die qryZahlungen statt der tblKonto. In dieser Beispiel-DB ist sie zwar identisch mit der tblKonto, aber in DB in die diese Berechnung integriert werden soll, gibt es nur positive Werte, die ich dann mit dem richtigen Vorzeichen in der qryZahlungen zur Verfügung stelle. Danke
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am Juni 02, 2022, 16:40:55
Hallo

@ Baker s.a.

Nochmal zur Erklärung:

Es handelt sich um ein Depot, die darin befindlichen WePas entsprechen im Prinzip einem Konto.
Alle Zahlungen werden in der tblKonto gespeichert und über die entsprechende ID mit dem WePa (Konto) verknüpft.
Alle Veränderungen im Bestand in der tblBewegung gespeichert.
Daneben gibt es auch Kosten, die nicht einem WePa zugeordnet werden können. Daher sind alle Zahlungen in der tblKonto gespeichert.
Diese hätte auch Depot heißen können.
Ich hoffe, dass bringt ein wenig Klarheit zu den von mir gewählten Namen.

Liebe Grüße - Wolfgang

Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am Juni 14, 2022, 12:00:12
Hallo,

leider hat sich niemand mehr zu diesem Thema gemeldet.

Ich hatte schon beschrieben, dass ich die Anpassung zur Berechnung der Rendite einzelner Wertpapiere nur mit Mühen und unzähligen Versuchen geschafft hatte.

Wenn eine Berechnung der Gesamtrendite zu mehreren Terminen möglich ist, würde ich mich über jegliche Hilfe, Tipps oder Lösungsansätze freuen.

Ohne Hilfe bekomme ich die Berechnung der Gesamtrendite zu mehreren Terminen wie auf dem Formular zur Renditeberechnung in der angehängten Beispiel-DB nicht gelöst.

Liebe Grüße - Wolfgang
Titel: Re: Inhalt eines ungebundenen Textfeldes speichern
Beitrag von: Ratoncito am Juni 26, 2022, 14:05:58
Hallo,

keine Antwort ist ja eigentlich auch eine Antwort...

Für mich ist die Berechnung der Rendite zu unterschiedlichen Terminen sehr interessant und würde meine DB um einen sehr wichtigen Punkt erweitern. Daher würde ich mich über jegliche Hilfe, Tipps oder Lösungsansätze freuen.

Erklärungen zum Formular habe ich schon geschrieben, fehlende Daten finde ich nicht. Gibt es sonst einen Grund für fehlende Antworten?

Gruß - Wolfgang