Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Werte aus zwei Kombifeldern in Textfeld zusammenführen und Schrift formatieren

Begonnen von bky, April 29, 2020, 15:25:26

⏪ vorheriges - nächstes ⏩

bky

Hallo zusammen,
lange hat es ja nicht gebraucht, bis ich als Laie mal wieder an meine VBA-Grenzen gekommen bin  ::). Aktuell versuche ich die Werte (bzw. den Text) zweier Kombifelder in einem ungebundenen Textfeld zu kombinieren und jeweils fett darzustellen. Zusätzlich sollen die Werte jeweils durch Zeilenumbrüche und den Textbaustein "in Verbindung mit" getrennt sein.
Ein kleines Beispiel:
Text aus Methode1
in Verbindung mit
Text aus Methode2

Zuerst war ich drauf und dran in alte Muster zurückzufallen und das Problem per Nachschlagefeld zu lösen, also:
=[Methode1] & Zchn(13) & Zchn(10) & "in Verbindung mit" & Zchn(13) & Zchn(10) & [Methode2]

Dort wusste ich aber z.B. nicht, wie ich die Werte aus Methode1 und Methode2 fett bekomme. Außerdem fiel mir ein, dass immer davon abgeraten wird Nachschlagefelder zu benutzen. Also blieb nur noch die Möglichkeit VBA (was ich persönlich viel besser finde, aber worin ich schlicht noch keine Erfahrung habe). Hier habe ich es erstmal mit folgendem probiert:

Private Sub txt_MethodenangabeKombiniert_AfterUpdate()
    Me.cbo_Methode1.Font.Bold = True
    Me.cbo_Methode2.Font.Bold = True
End Sub

Mir ist klar, dass selbst wenn der Code funktionieren würde ich noch eine Ereignisprozedur beim Formular auslösen muss, damit der zusammengesetzte Text beim Öffnen des Formulars angezeigt wird und nicht erst, nachdem man die Werte von Methode1 oder Methode2 geändert hat. Aber auch hier hat die Suche im Netz mir leider keine passenden Ergebnisse geliefert.

Zusatzinfos: Es gibt weiteren VBA-Code für das Formular, der aber meiner Einschätzung nach kein Problem darstellt:

Private Sub Form_Current()                                 
    Me.cbo_Methode1.Visible = Me.chk_ExternesDokument   
        If Me.cbo_InternesDokument_ID = 1 Then
            Me.cbo_Methode2.Visible = True
        End If
       
   End Sub

Ich hoffe, ihr könnt mein Problem nachvollziehen und bedanke mich schonmal für eure Mühen.

Viele Grüße,
bky

DF6GL

Hallo,

das geht schlichtweg nicht mit einem Formular-Textfeld, bzw. Kombifeld.

Allenfalls kannst Du ein Richtext-Feld hernehmen und den Text mit RTF-Tags formatieren
oder 3 einzelne Textfelder untereinander setzen und passend einstellen.

(Ich spreche hier von Formular-Steuerelementen, nicht von Nachschlagefeldern in Tabellen, die vermieden werden sollen.)
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Beaker s.a.

@bky
Das man in Textfeldern Teilstrings keine unterschiedlichen Formate zuweisen kann,
hat die Franz schon geschrieben, - und die möglichen Workarounds.
Das gewählte Ereignis "Form_Current" ist auch für das Zusammensetzen des Strings
das richtige. Dein If-Konstrukt kannst du dabei allerdings auch durch einen Einzeiler
ersetzen
Private Sub Form_Current()                                 
    Me.cbo_Methode1.Visible = Me.chk_ExternesDokument   
    Me.cbo_Methode2.Visible = (Me.cbo_InternesDokument_ID = 1 )       
    Me.DeinTextfeld = _
        Me.Me.cbo_Methode1 & vbcrlf _
     & "in Verbindung mit"  & vbcrlf _
     & Me.cbo_Methode2
   End Sub

Anmerkung: Normalerweise steht bei Kombis in der 1. Spalte (0), meist unsichtbar
eine ID. Wenn das auch bei dir so ist, musst du statt der oben verwendeten Stan-
dardeigenschaft .Value (= Spalte 0), die .Column(n)-Eigenschaft heranziehen
Me.cbo_MethodeN.Column(n)
N = Kombi, n = Spalte mit gewünschtem Text

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

bky

Hallo!
Super, vielen Dank für die detaillierten Antworten! Dadurch habe ich schon wieder einiges dazu gelernt :). Dass man solche Art von Formatierungen nicht mit Kombis/Textfeldern bewerkstelligen kann ist natürlich ernüchternd, aber zeigt mir wenigstens, dass ich keine einfache Lösung übersehen habe. Den Workaround werde ich auf jeden Fall mal ausprobieren, doch aus Zeitgründen werde ich das wohl vorerst nach hinten verschieben müssen und mit drei zusammengeschusterten Textfeldern vorlieb nehmen.

@Beaker
Wie genau sind die Klammern beim Befehl

Me.cbo_Methode2.Visible = (Me.cbo_InternesDokument_ID = 1 )

zu verstehen? Sind diese "nur" dazu da den eigentlichen Befehl Me.cbo_InternesDokument_ID = 1 einzuschließen, dass dieser vom Programm als eigener Befehl interpretiert und nicht zum vorherigen Befehl Me.cbo_Methode2.Visible gezählt wird (wegen der zwei Gleichheitszeichen)?
Was den Rest deines Codes angeht:
Welchen Hintergrund hat das doppelte Me.Me.cbo_Methode1 im Code? Und wurde der Befehl vbcrlf nicht vor einiger Zeit abgeschafft (Das habe ich zumindest gelesen   ??? )? Deshalb stattdessen das Zchn(13) & Zchn(10) in meinem Code.

Ich hoffe, ich frage nicht zuviel  ::).

Viele Grüße,
bky


DF6GL

Hallo,

ich antworte schon mal:

Die Klammern sind in VBA überflüssig und dienen hier nur zur "Klarheit" für den Programmierer als auch für Access.

So kommt es nicht zu "Seiteneffekten", was in (anderen) Programmiersprachen zu Fehlinterpretierungen führt, weil die Codezeile nicht von links nach rechts, sondern auch von rechts nach links abgearbeitet werden kann. (Würde hier trotzdem nicht zu einem Fehler führen)

Zitat
das doppelte Me.Me.cbo_Methode1 im Code

das ist ein Tippfehler. Ein "Me." ist zu entfernen.

Zitatder Befehl vbcrlf nicht vor einiger Zeit abgeschafft

Das ist kein Befehl, eher eine VBA-Konstante und beinhaltet eben "Zchn(13) & Zchn(10)".   VbCrLf wurde auch nicht abgeschafft.
Da es eine VBA-Konstante ist, ist diese auch nur in VBA-Code verwendbar und nicht woanders, z. B. in einem SQL-Statement, wo dann auf "Zchn(13) & Zchn(10)", bzw. "Chr(13) & Chr(10)", zurückgegriffen werden muss.

Fragen sind nie zuviel, solange sie sich nicht selbst beantworten...  ;)

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

bky

Alles klar, vielen vielen Dank für die Antworten! Wieder was gelernt  8).

Ich frage mich trotzdem, warum man für so eine "einfache" Operation wie einen Zeilenumbruch derart komplizierte Befehle wie Zchn(13) & Zchn(10) und VbCrLf nutzt. Vermutlich ist das alles "historisch" bedingt, da VBA ja seit einer Weile nicht mehr wirklich weiterentwickelt wurde, oder?  ???

Vielen Dank nochmal und ein schönes Wochenende!

DF6GL

Hallo

Zitatderart komplizierte Befehle ...

das findest Du kompliziert??   Dann hast Du noch nicht viel VBA-Code gesehen... :o


Zitatnicht mehr wirklich weiterentwickelt


kennst Du eine andere "moderne" Pr.-Sprache, in der das (dramatisch) anders behandelt wird? (Machmal reicht auch Cr oder Lf als einziges Zeichen, um eine(n) neue(n) Zeile(nanfang) zu erwirken.

Die zwei Steuerzeichen "Cr" und "Lf"  (Chr(13), Chr(10)) gibt es seit Teletype-Zeiten (Pre-PC-Zeiten) und wird es eine Weile auch noch weiter in Strings zur Ausgabe-Gerät-Steuerung geben.


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Beaker s.a.

Vielen Dank Franz.
Das doppelte Me. war natürlich ein C&P-Fehler.
Das die Klammern da nicht nötig sind ist mir bewusst. Ich finde nur einen geklammerten Ausdruck leichter lesbar.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)