Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Textbox mit VBA passend für DIN A4 Layout formatieren
#1
Liebes Forum,

ich brauche Eure Unterstützung bei folgender Situation: 
.xlsm   Textbox_Test.xlsm (Größe: 30,76 KB / Downloads: 1)
Ich bekomme Feedback von Kunden zu 3 Fragen. Die Antworten sind in 3 Spalten zeilenweise je Kunde in einer Exceltabelle.
Dieses Kundenfeedback soll in Stichpunktform, an das DIN A4 Format angepasst, präsentier- und druckbar sein.

In der angehängten Beispieldatei enthalten die Zellen B3:B5 die Kundenfeedbacks je Frage. Im Original, hole ich mir diese Form mit der TEXTVERKETTEN-Funktion (ich habe hier nur die Werte eingefügt). Das funktioniert dynamisch bei neuen Daten in der Tabelle und passt perfekt.

Mein Gedanke, dieses Feedback in die "richtige" Form zu bringen, war die Textbox zu nutzen und diese mit VBA auch direkt passend zu formatieren.

Was funktioniert bis jetzt: Die Textbox hält den Abstand zum linken Blattrand ein und die festgelegte Breite. Mit AutoSize ist die Länge der Textbox ebenfalls passend eingestellt.

Wo liegt die Herausforderung?
- Mit dem aktuellen Code wird kein automatischer Zeilenumbruch mehr am Ende der Textbox durchgeführt! (funktioniert einwandfrei, wenn Autosize auskommentiert wird!?)
- Bei festgelegter Anfangsbreite, kann ich dafür die Länge nicht dynamisch festlegen, da ich keine Idee habe wie das zu ermitteln ist.
Das sind meine 2 wichtigsten Punkte Wenn ich AutoSize = False vor .Width = Breite einfüge funktioniert der Zeilenumbruch wieder, dafür ist die Textbox in der Länge dann zu kurz. Es muss doch eine Möglichkeit geben, nur die Länge flexibel zu halten?!?

- Im Tabellenblatt "Feedback" werden die Zeilen der Textbox durch den unteren Seitenrand einfach durchgeschnitten, wie lässt sich das vermeiden?
Wäre auch noch prima 

- Wie kann ich einen bestimmten einzigartigen Text formatieren, ohne seine genaue Position in der Textbox zu kennen? (konkret die 3 Fragen in Schriftgröße 11 und Farbe RGB 100,100,100)
Nice to have  Über Len(Cells(3,2).Value) konnte ich die Position doch ermitteln!

Falls Ihr eine grundlegend einfachere Umsetzung kennt bin ich dafür genauso offen, wie für eine Erweiterung meiner VBA Kenntnisse :)

Wer den Code gleich hier studieren möchte:
Code:
Sub Text_erstellen()

Dim Breite As Double
Dim Linker_Rand As Double

Breite = Application.CentimetersToPoints(17)
Linker_Rand = Application.CentimetersToPoints(1.8)

ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, Linker_Rand, 100, _
        Breite, 100).Select
    With Selection
        With .Characters.Font
             .Name = "Arial"
             .FontStyle = "regular"
             .Size = 10.5
             .ColorIndex = xlAutomatic
        End With
      .Name = "Feedback"
      .ShapeRange.LockAspectRatio = msoFalse
      .Text = Cells(3, 2) & vbLf & vbLf & Cells(4, 2) & vbLf & vbLf & Cells(5, 2)
      .AutoSize = True
      .Width = Breite
   End With
End Sub

Wie immer vielen Dank vorab für Eure Mühe!

Sonnige Grüße,
Phiant

P.S.: Es gibt noch ein weiteres Makro in der Datei um die Position und Maße der Textbox auszulesen, das dient erstmal nur der Überprüfung, eventuell kann ich die Variablen aber noch anders einsetzen, falls mehrere Textboxen gebraucht werden oder sonstiges aufkommt (hatte ich in einem Forum gefunden).
Antworten Top
#2
(23.06.2021, 16:47)Phiant schrieb: Wo liegt die Herausforderung?
- Mit dem aktuellen Code wird kein automatischer Zeilenumbruch mehr am Ende der Textbox durchgeführt! (funktioniert einwandfrei, wenn Autosize auskommentiert wird!?)
- Bei festgelegter Anfangsbreite, kann ich dafür die Länge nicht dynamisch festlegen, da ich keine Idee habe wie das zu ermitteln ist.
Das sind meine 2 wichtigsten Punkte Wenn ich AutoSize = False vor .Width = Breite einfüge funktioniert der Zeilenumbruch wieder, dafür ist die Textbox in der Länge dann zu kurz. Es muss doch eine Möglichkeit geben, nur die Länge flexibel zu halten?!?

Ich habe schon befürchtet, dass das Thema nicht so einfach gelöst wird...
Bei meiner Recherche habe ich rausgefunden, dass bei einer Textbox auf einem Tabellenblatt - so wie bei mir - nicht alle Eigenschaften nutzbar sind.

Kleines Update:
Ich wollte die Höhe der Textbox über den Umweg mit .LineCount * Zeilenhöhe einstellen, allerdings gibt es bei .LineCount einen Laufzeitfehler und kopierbare Lösungen habe ich bisher nicht gefunden.
Eine weitere Lösungsmöglichkeit wäre die Option "Textüberlauf über Form zulassen", damit wird der gesamte Text druckbar  Idea Nur wie kann ich diese Option in VBA aktivieren?!

Wer kann bei diesen beiden Punkten Licht ins Dunkel bringen :)?

Gruß
Phiant
Antworten Top
#3
(23.06.2021, 16:47)Phiant schrieb: Wo liegt die Herausforderung?
- Mit dem aktuellen Code wird kein automatischer Zeilenumbruch mehr am Ende der Textbox durchgeführt! (funktioniert einwandfrei, wenn Autosize auskommentiert wird!?)
- Bei festgelegter Anfangsbreite, kann ich dafür die Länge nicht dynamisch festlegen, da ich keine Idee habe wie das zu ermitteln ist.
Das sind meine 2 wichtigsten Punkte Wenn ich AutoSize = False vor .Width = Breite einfüge funktioniert der Zeilenumbruch wieder, dafür ist die Textbox in der Länge dann zu kurz. Es muss doch eine Möglichkeit geben, nur die Länge flexibel zu halten?!?

- Im Tabellenblatt "Feedback" werden die Zeilen der Textbox durch den unteren Seitenrand einfach durchgeschnitten, wie lässt sich das vermeiden?
Wäre auch noch prima 

- Wie kann ich einen bestimmten einzigartigen Text formatieren, ohne seine genaue Position in der Textbox zu kennen? (konkret die 3 Fragen in Schriftgröße 11 und Farbe RGB 100,100,100)
Nice to have  Über Len(Cells(3,2).Value) konnte ich die Position doch ermitteln!

Update:
- Das Thema "nötige Höhe der Textbox" auslesen oder dynamisch gestalten - bei fester Breite - ist nach wie vor ungelöst. (Jeder Anstatz würde mir schon weiterhelfen.)
- Der Übergang zur nächsten Seite bereitet mir noch Kopfzerbrechen. Wenn ich die Zeilenhöhe im Tabellenblatt so anpasse, dass die letzte Zeile in der Textbox sauber endet und auf der neuen Seite wieder sauber beginnt, ist es in der Druckansicht leicht verschoben und teilt mir die Zeile des Texts wieder horizontal. Ist das ein Textbox-Problem oder wie kann ich das lösen?
Antworten Top
#4
Hallöchen,

hier mal (m)ein Ansatz:

Variable Textfeldanordnung

und das bringt mir der Makrorekorder, wenn ich wissen will, wie der Textumbruch geschalten wird:

Zitat:Option Explicit

Sub Makro1()
'
' Makro1 Makro
'

'
ActiveSheet.Shapes.Range(Array("TextBox 1")).Select
Selection.ShapeRange.TextFrame2.WordWrap = msoTrue
Range("H10").Select
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#5
Hallöchen schauan :)

Kommt etwas spät, aber tatsächlich funktioniert das auch nicht...ich habe die Höhe der Textbox jetzt einfach ungefähr berechnet (Zeichenzahl der gesamten Textbox : durchschnittliche Zeichenzahl je Zeile x Zeilenhöhe in Pixel) damit ist es zumindest so gut, dass vernünftig damit gearbeitet werden kann.

Auch wenn ich mir eine "perfekte" Lösung gewünscht habe :)

Liebe Grüße und Danke für das Engagement!
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste