Liebe/-r Experte/-in,
Ich suche eine Möglichkeit, die Länge eines Textes zu bestimmen: nicht die Anzahl Zeichen, sondern in Pixel, cm, o.ä. Das alles ist abhängig vom Text, der Schrift, der Schriftgröße, ob fett, kursiv, …
Z.Zt. gehe ich folgenden Weg:
Ich übertrage den Text und die Formatierung in eine Zelle einer ansonsten leeren Spalte, dann setze ich die spalte auf „autofit“
(Columns(„B:B“).EntireColumn.AutoFit)
und dann lese ich die Spaltenbreite.
Das dauert natürlich ewig, und ich denke, daß es da einen einfacheren Weg geben muß. Wäre schön, wenn mir einer von euch helfen könnte!
Hallo Wolfram,
tut mir Leid, das Problem habe ich bisher auch nicht elegant gelöst, nur ähnlich: schreiben in ein Label mit AutoSize = True und dann Länge abfragen. Die Lösung würde mich aber interessieren, könntest Du mir eine bessere weiterleiten? Danke.
Viel Erfolg
Rainer
Liebe/-r Experte/-in,
Ich suche eine Möglichkeit, die Länge eines Textes zu
bestimmen: nicht die Anzahl Zeichen, sondern in Pixel, cm,
o.ä. Das alles ist abhängig vom Text, der Schrift, der
Schriftgröße, ob fett, kursiv, …
Moin, moin!
Da diese Textlänge, wie Du ja selber schon sagst, von -zig Parametern abhängig ist, glaube ich nicht, dass es einen einfachen Weg gibt, um so eine Länge herauszubekommen. Wenn es jemand besser weiß als ich, wäre ich für eine Mitteilung dankbar!
Du brauchst Informationen zu dem verwendeten Schrifttyp:
fuer jedes Zeichen die Breite (fuer normal-, fett-, kursiv-, usw.). Dann kannst du es rechnerisch (z.B. in VBA) berechnen. Wo man diese Informationen bekommt weiss ich auch nicht, also ist deine jetztige Methode auch nicht schlecht…
ich glaube das es dafür keine Lösung geben wird, denn,
jeder Buchstabe hat seine eigene Breite, die vom Schriftgrafiker visuell festgelegt wurde. Ich denke aber trotzdem mal nach was man da machen könnte. Aber zunächst mal ein Hinweis zum Thema Autofit:
Die optimale Spaltenbreite liefert 2 Werte z.B.10,71(22 Pixel) der Wert vor der Klammer liefert die Anzhl 0 (Nullen) laut Standardschriftart /-schriftgröße. Dieser Wert ist also nicht die Länge die Du vielleicht brauchst.
dazu fällt mir leider auch keine pauschale Lösung ein. Die Breite der Buchstaben ist ja auch verschieden und je nach Schriftart verschieden, so dass man daraus auch keine Pixellänge o.ö ableiten kann.
da die Breite eines angezeigten Zeichens vom
verwendetem Gerät und von der verwendeten Schriftart
abhängt, könnte man versuchen, für jedes Zeichen
einmalig die Breite zu ermitteln und anschließend in
Text die Breite der einzelnen Zeichen anhand einer
mathematischen Formel zusammenaddieren.
Hierzu braucht man eine Tabelle mit allen Zeichen. Mit
Hilfe des Aufrufs .EntireColumn.AutoFit muss die
Optimale Breite einmalig ermittelt werden. Zum Schluss
müssen die Längenangaben z.B. in einem Array
zwischengespeichert werden.
Um die Textlänge von einem beliebigen Text ermitteln zu
können, muss der Text Zeichenweise durchlaufen werden
und die Länge entsprechend der Angaben in Array
zusammenaddiert werden.
Vielleicht hilft dieser Ansatz weiter?
Grüße,
BigBen
Liebe/-r Experte/-in,
Ich suche eine Möglichkeit, die Länge eines Textes zu
bestimmen: nicht die Anzahl Zeichen, sondern in Pixel,
cm,
o.ä. Das alles ist abhängig vom Text, der Schrift, der
Schriftgröße, ob fett, kursiv, …
Z.Zt. gehe ich folgenden Weg:
Ich übertrage den Text und die Formatierung in eine
Zelle
einer ansonsten leeren Spalte, dann setze ich die
spalte auf
„autofit“
(Columns(„B:B“).EntireColumn.AutoFit)
und dann lese ich die Spaltenbreite.
Das dauert natürlich ewig, und ich denke, daß es da
einen
einfacheren Weg geben muß. Wäre schön, wenn mir einer
Hallo Wolfram,
ich ging davon aus, dass Du mit VBA arbeitest, so habe ich zumindest die Übertragung interpretiert? Wenn ich mit VBA arbeite habe ich meist eine Form mit verschiedenen Objekten (Check-/Optionboxen etc., darunter auch ein Label (das könnte auch direkt in einer Tabelle sein), das ist ein Objekt zur reinen Textanzeige, es kann ausgeblendet werden). Diesem Label muss man dann natürlich die Formateigenschaften (Schriftart, -grösse, fett/normal etc.) und den Text zuweisen. Bei der Eigenschaft AutoSize=True wählt VBA die passende Größe (analog Autofit). Achtung: für das Label darf natürlich nicht Zeilenumbruch gewählt werden! Jetzt alles klar?
Rainer
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
meiner Ansicht nach laesst sich das Problem mit Boardmitteln von EXCEL nicht loesen. Es ist aber durchaus moeglich die Laenge eines Textes in Abhaengigkeit der Formatierung und des Devicecontexts auf dem er ausgegeben wird zu ermitteln. Dazu muss man aber ein wenig in die Tiefen der GDI-API einsteigen.
Die Funktion „GetTextExtentPoint32“ sollte das erledigen koennen. Wie man einen DC erzeugt, mit einem Font, einer Brush etc. versorgt und dann einen Text darauf ausgibt, ist in der MSDN bei MS mit guten Beispielen beschrieben.
Leider kann ich dir keinen einfacheren Loesungsweg anbieten.
derzeit ist mir keine andere Möglichkeit bekannt, die Textbreite in Punkt auszulesen. Vielleicht haben wir Glück und Microsoft ergänzt diese Eigenschaft in einer der nächsten Excel-Versionen
Wozu?
Ein Text soll mittig in einer Zelle sthen, falls er paßt, ansonsten linksbündig, so daß immer der Textanfang zu sehen ist.
Gehört zwar in die rubrik „in Schönheit sterben“, aber ist nun mal so verlangt.
Im Übrigen: Danke an alle, die bisher geantwortet haben