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
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.)
@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
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
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... ;)
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!
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.
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