November 24, 2020, 07:22:36

Neuigkeiten:

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


Dynamisches Textfeld soll sich nur horizontal erweitern

Begonnen von herb54, Oktober 23, 2020, 17:12:43

⏪ vorheriges - nächstes ⏩

herb54

Oktober 23, 2020, 17:12:43 Letzte Bearbeitung: Oktober 23, 2020, 17:18:09 von herb54
Hallo,

ich bin gerade dabei einen Bericht für eine Bescheinigung zu erstellen. Der Bericht soll als Datenquelle die Daten einer Tabelle enthalten (Anrede, Nachname, Vorname usw.). Alle Daten dieser Tabelle sollen in der Bescheinigung in der Schriftbreite "Halbfett" dargestellt sein (sonst "Normal"). Bisher wurden diese Bescheinigungen manuell über ein Vorlagewordformular erstellt d.h. alle Daten mussten manuell in Word noch mal eingegeben werden.
Ich habe versucht den Bericht in einzelne Felder aufzuteilen:
a) ungebunden = nur mit Text
Beispiel:
Textfeld1 - Steuerelementinhalt: ="Wir bescheinigen hiermit, dass"

b) gebunden = mit den Daten der Tabelle (Halbfett formatiert)
Beispiel:
Textfeld2 - Steuerelementinhalt:  =[Anrede] & " " & [Vorname] & " " & [Nachname]
Textfeld3 - Steuerelementinhalt:  ="in der Zeit vom...."

Auf diese Weise ist das Ganze jedoch nicht machbar:
 
Einerseits verschieben sich die Textfelder vertikal nach unten wenn man die Eigenschaft "Vergrößerbar und Verkleinerbar auf "Ja" stellt (sh. Bilder: Name kurz, Name lang)Sie dürfen in diesem Board keine Dateianhänge sehen..

Zweitens müsste sich das  nachfolgende Textfeld ja in die nächste Zeile verschieben, wenn die Berichtsbreite erreicht ist.
Meine weitere Überlegung wäre die Daten an ein Worddokument zu übergeben. Dort müssten dann die Textfelder  jedoch exakt in entsprechende Textmarken
des Dokuments übergeben werden.  Da ist für mich jedoch absolutes Neuland. Kann mir da jemand weiterhelfen?
Im Voraus vielen Dank!
Herri

DF6GL


Hallo,


mit verschiedenen "normalen" Textfeldern wirst Du kein Glück haben. 

a) Benutze ein einzelnes Textfeld mit Textformat "Ritch-Text" (das hat als Inhalt RTF- oder HTML-Code)
b) Benutze Word-Automation mit entsprechend formatierten Textmarken in einer Word-Vorlage

herb54

Oktober 23, 2020, 18:11:58 #2 Letzte Bearbeitung: Oktober 23, 2020, 18:31:30 von herb54
Zitat von: DF6GL am Oktober 23, 2020, 17:28:51Benutze ein einzelnes Textfeld mit Textformat "Ritch-Text" (das hat als Inhalt RTF- oder HTML-Code)

Hallo Franz,

a) ich verstehe jetzt nicht wie du das meinst: Ich habe ja gebundene und ungebundene Teile. Wie kann ich da nur ein einziges Textfeld verwenden? Ein gebundenes Textfeld kann doch immer nur ein Feld der Tabelle abgreifen.

b) Wordautomation: Da bin ich leider totaler Neueinsteiger. Was ich durch Googeln gefunden habe und was mir auch noch einigermaßen verständlich wäre ist diese Funktion:

Function test()

Dim docApp As Word.Application, docBrief As Word.Document
Set docApp = CreateObject("Word.Application")
docApp.Visible = True
Set docBrief = docApp.Documents.Open("C:\Dokumente und Einstellungen\..........\Dateiname.doc")
docBrief.Bookmarks("Name_des_Texfeldes").Range.Select
docBrief.Unprotect
docApp.Selection.TypeText "Inhalt_den_ihr_übergeben_wollt"
Set docApp = Nothing
docBrief.SaveAs "C:\Dokumente und Einstellungen\..........\Dateiname_neu.doc"

End Function

Wobei ich bei "Inhalt den ihr übergeben wollt" mir nicht klar ist ob das ein Textfeld von Access sein soll oder reiner Text (weil mit " "geschrieben. Ich hätte hier z.B. Me!Textfeld gedacht.)
Gruß
Herri

DF6GL

Oktober 24, 2020, 09:34:06 #3 Letzte Bearbeitung: Oktober 24, 2020, 09:40:00 von DF6GL
Hallo,

ZitatWie kann ich da nur ein einziges Textfeld verwenden


Bau ein ungebundenes Textfeld ("txtText") in den Bericht und setze im Steuerelementinhalt die Strings aus den anderen gebundenen Textfeldern zusammen (Diese können/sollten auf unsichtbar stehen)

="Wir bescheinigen hiermit, dass " & [Anrede] & " " & [Vorname] & " " & [Nachname] & "in der Zeit vom...."

wobei das in der Ereignisprozedur "beim Formatieren" besser aufgehoben ist:


.
.
Me!txtText = "Wir bescheinigen hiermit, dass " & (Me![Anrede] + " ") & (Me![Vorname] + " ") & [Nachname] & " in der Zeit ..."
.
.


Hierbei ist allerdings auch keine unterschiedliche Formatierung von Textteilen möglich, wenn Textformat "Nur Text" verwendet wird.

Wird das Textfeld auf "Rich-Text" eingestellt, so kann eine String-Variable zunächst mit dem gesamten Text UND den erforderlichen RTF-Tags (normal, fett, Farbe, etc.) gefüllt (zusammengesetzt)  und dieser String dem Textfeld zugewiesen werden.

Dim strRTF as String

strRTF = <<RTF-formatierter Text>>

Me!strText = strRTF

(Wobei ich hier nicht sicher bin, ob ein ungebundenes Textfeld auf "Ritch-Text" eingestellt werden kann. Wenn nicht, dann ist der RTF-String z. B. in einer Public-Funktion zusammenzubauen, die dann in der Berichtabfrage in einer leeren Spalte aufgerufen werden.)



Word Automation bietet sich an, wenn komplexere Formatierungen und Seitenlayout erforderlich werden.

Textmarken werden in eine Word-Vorlage entsprechend den Vorgaben eingebaut, formatiert und positioniert.


Diese Word-Textmarken werden per Word-Automation (Word-Instanz öffnen) mit "Leben" gefüllt, soll heißen, mit Text, entweder aus String-Literalen oder dem Inhalt der gebundenen Textfelder gefüllt.




(Luftcode):

3 Textmarken "Text1", Person" und "Text2" in der Wordvorlage.

Private Sub btnTxt2Word_Click()

Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document

On Error Resume Next

Set wrdApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then
    Set wrdApp = CreateObject("Word.Application")
    Err.Clear
End If

On Error Goto myErr

Set wrdDoc = wrdApp.Documents.Add("c:\Word_Vorlagen\MeineVorlage.dotx")
wrdApp.Visible = True
wrdApp.Activate
wrdApp.ActiveWindow.Caption = "Bescheinigung"

With wrdDoc
    If .Bookmarks.Exists("Text1") Then
        .Bookmarks("Person").Select
        .ActiveWindow.Selection.Text = "Wir bescheinigen hiermit, dass"
    End If


    If .Bookmarks.Exists("Person") Then
        .Bookmarks("Person").Select
        .ActiveWindow.Selection.Text =  (Me![Anrede] + " ") & (Me![Vorname] + " ") & [Nachname]
    End If

    If .Bookmarks.Exists("Text2") Then
        .Bookmarks("Text2").Select
        .ActiveWindow.Selection.Text = " in der Zeit ..."
    End If


' hier evtl. speichern, drucken, schließen  oder irgendwelche weiteren Arbeiten am Dokument

End With

Exit_Code:
Set wrdDoc = Nothing

Exit Sub

myErr:
  Msgbox "Error aufgetreten: " & Err & "-- " & Err.Description

  Resume Exit_Code

End Sub

herb54

Hallo Franz,

Zitat(Wobei ich hier nicht sicher bin, ob ein ungebundenes Textfeld auf "Ritch-Text" eingestellt werden kann. Wenn nicht, dann ist der RTF-String z. B. in einer Public-Funktion zusammenzubauen, die dann in der Berichtabfrage in einer leeren Spalte aufgerufen werden.)

Rich Text bei ungebundenen Textfeldern geht leider nicht (das habe ich schon durchprobiert). Ich denke, ich werde es mit der Word-Automation versuchen. Zumal es ca. 7 verschiedene Arten von Vorlagebescheinigungen sind mit unterschiedlichen Formatierungen (Schriftgrad, Schriftgröße, Schriftart). Das mit Berichten zusammenzuschustern ist doch etwas umständlich. Ich werde mir mal deinen Beispielcode der Wordautomation durcharbeiten und das Ergebnis auf alle Fälle hier einstellen. Vielen Dank für die Unterstützung!
Gruß
Herri




herb54

Hallo,

ich habe jetzt mal ein Versuch mit einer Wordautomation gemacht. Klappt auch wunderbar:
 
Option Compare Database

Private Sub Befehl4_Click()
' ********************************

Const Pfad As String = "C:\Eigene Dateien\"
' Pfad wo die neu erstellte Word Datei gespeichert wird

' ********************************
Const wdDialogFileSaveAs = 84
' = Dialogfenster "Speichern" in Word
' ********************************

Dim appWord As Object, docWord As Object
' =  appWord = Wordvorlage,  docWord = neu erstellte Worddatei
' ******************************************************

Set appWord = CreateObject("word.application")
appWord.Visible = True
' =  Erstellen von appWord als Word-Dokument
' ***************************************

Set docWord = appWord.Documents.Add("C:\Users\Username\Documents\Autotext.docx")
' = docWord wird zur Kopie von appWord (Pfad zum Wordvorlagedokument)
'    damit bleibt die Originalvorlage appWord unverändert
' ****************************************************************

With docWord
   .Bookmarks("neu1").range = Me!neu1
End With
' = Routine zum Übertragen der Accesstextfelder in die Word Textmarken von docWord
' ************************************************************************


appWord.ChangeFileOpenDirectory ("C:\Users\Username\Documents\Bescheinigungen")
With appWord.Dialogs(wdDialogFileSaveAs)
   .Name = Format(Date, "yyyy-mm-dd")
   .Show
   Set docWord = Nothing
   End With
' = Routine zum Abspeichern und öffnen des neuen Dokuments
' ****************************************************
End Sub



Mein Problem:

With docWord
   .Bookmarks("neu1").range = Me!neu1
End With

Wie kriege ich hier eine Formatierung: fett, halbfett bzw. Schriftgröße, Schriftart hin? Die eingefügten Textmarken sollten ja eine dieser Formatierungen besitzen.

Grüße
Herri



DF6GL

Hallo,


ZitatTextmarken werden in eine Word-Vorlage entsprechend den Vorgaben eingebaut, formatiert und positioniert.

herb54

Hallo Franz,
das Textfeld das ich als Textmarke einbaue ist in der Tabelle als "Langer Text"  und "Rich Text" eingestellt.
Übrigens stimmt meine Aussage nicht: Man kann ungebundene Textfelder doch als Rich Text formatieren. Ich habe es dann auch mal mit einem ungebundenen Textfeld probiert:
 Text5 =[neu1]
und als Eigenschaft Rich Text und Schriftbreite Fett.

With docWord

   .Bookmarks("neu1").Range = Me!Text5
   
End With

Geht alles nicht. Es wird immer nur in normaler Schriftbreite eingefügt.
Gruß
Herri

DF6GL

Hallo,
die Formatierung eines Rich-Textfeldes und die Formatierung einer Word-Textmarke sind doch unterschiedliche Sachen und haben nichts miteinander zu tun.  Formatiere also die Word-Textmarke nach Deinem Gusto und übergebe lediglich den reinen Text aus einem normalen Textfeld (kurzer Text) an die Textmarke.




herb54

Hallo Franz,

vielen Dank! Das war entscheidende Tipp! Ich hatte die Textmarke nicht formatiert. Zunächst habe ich mir
im Word-Vorlagedokument über: Optionen - Erweitert - Dokumentinhalt anzeigen - "Textmarke anzeigen" aktiviert. Anschließend habe ich mir im Dokument die Textmarke markiert und auf "Fett" eingestellt.
Mein Gedankenfehler: Ich dachte, dass man dies über den Code machen müsste.
Nochmals vielen Dank für die Hilfe!!
Grüße
Herri