Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Textlänge in Pixel, Punkt oder ä.

Textlänge in Pixel, Punkt oder ä.
02.12.2017 18:51:54
yogi
Hallöchen
ich muss längere Texte in einer Listbox anzeigen. Das Problem: In einem Listbox-Item gibt es keine automatischen Zeilenumbrüche. Ich habe das Problem nun so gelöst, dass ich den Text in homöopatische Teile splitte, die auf einer Zeile Platz haben. So werden aus einem längeren Text diverse Einträge in der Listbox. Mein Problem: Je nach Schriftart und Schriftgrösse braucht ein bestimmter Text mehr oder weniger Platz. Die ColumnWidth ist auf 474.95 Pt gesetzt. Wie kann ich nun feststellen, wieviele Zeichen des anzuzeigenden Textes da Platz haben?
Gruss
yogi
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textlänge in Pixel, Punkt oder ä.
02.12.2017 18:53:24
Sepp
Hallo Yogi,
warum nimmst du eine Listbox zur Anzeige? Wäre eine Textbox nicht geeigneter?
Gruß Sepp

Makro hält an ohne Haltepunkt
02.12.2017 18:59:26
yogi
Salü Sepp
eine derartige Frage habe ich befürchtet. Es gibt diverse Gründe, warum eine Textbox nicht geht, so muss z.B. eine Meldung ausgewählt werden können. Die ganzen Randbedingungen will ich hier nicht erläutern, ich will nur wissen, wie ich die Breite eines Textes ermitteln kann.
Gruss
yogi
Anzeige
Textlänge in Listbox
02.12.2017 19:40:26
Sepp
Hallo Yogi,
eine kleine Beispieldatei: https://www.herber.de/bbs/user/118067.xlsm
Hier noch der Code:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub showForm()
UserForm1.Show
End Sub

Public Function breakText(ByVal theText As String, ByVal breakLength As Long) As String
Dim strTmp As String, strOut As String
Dim intLength As Integer, intN As Integer, intM As Integer
theText = Replace(theText, vbLf, " ")
intLength = Len(theText)
intM = 1
intN = 1
Do
  strTmp = Mid(theText, intN, breakLength)
  If intLength - intN >= breakLength Then
    If InStr(1, StrReverse(strTmp), " ") > 0 Then
      intM = Len(strTmp) - InStr(1, StrReverse(strTmp), " ") + 1
    Else
      intM = breakLength
    End If
  Else
    intM = Len(strTmp)
  End If
  strOut = strOut & Trim(Left(strTmp, intM)) & vbLf
  intN = intN + intM
Loop While intN < intLength
breakText = Left(strOut, Len(strOut) - 1)
End Function

' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit

Private Sub UserForm_Initialize()
Dim strText As String, varList As Variant
Dim lngIndex As Long

strText = "Eine wunderbare Heiterkeit hat meine ganze Seele eingenommen, gleich den süßen Frühlingsmorgen, die ich mit ganzem Herzen genieße. Ich bin allein und freue mich meines Lebens in dieser Gegend, die für solche Seelen geschaffen ist wie die meine. Ich bin so glücklich, mein Bester, so ganz in dem Gefühle von ruhigem Dasein versunken, daß meine Kunst darunter leidet. Ich könnte jetzt nicht zeichnen, nicht einen Strich, und bin nie ein größerer Maler gewesen als in diesen Augenblicken" & _
  "Wenn das liebe Tal um mich dampft, und die hohe Sonne an der Oberfläche der undurchdringlichen Finsternis meines Waldes ruht, und nur einzelne Strahlen sich in das innere Heiligtum stehlen, ich dann im hohen Grase am fallenden Bache liege, und näher an der Erde tausend mannigfaltige Gräschen mir merkwürdig werden; wenn ich das Wimmeln der kleinen Welt zwischen Halmen, die unzähligen, unergründlichen Gestalten der Würmchen, der Mückchen näher an meinem Herzen fühle, und fühle die Gegenwart des Allmächtigen, der uns nach seinem Bilde" & _
  "schuf, das Wehen des Alliebenden, der uns in ewiger Wonne schwebend trägt und erhält; mein Freund! Wenn's dann um meine Augen dämmert, und die Welt um mich her und der Himmel ganz in meiner Seele ruhn wie die Gestalt einer"

With txtDummy
  .Width = ListBox1.Width - 2
  .Font.Name = ListBox1.Font.Name
  .Font.Size = ListBox1.Font.Size
  .MultiLine = True
  .WordWrap = True
  .SetFocus
  Do
    lngIndex = lngIndex + 1
    .Text = Left(strText, lngIndex)
  Loop While .LineCount <= 1 And lngIndex <= Len(strText)
  .Visible = False
End With

varList = Split(breakText(strText, lngIndex), vbLf)

ListBox1.List = varList

End Sub

Gruß Sepp

Anzeige
AW: Textlänge in Pixel, Punkt oder ä.
02.12.2017 19:14:31
Nepumuk
Hallo,
schreib den Text in ein Label und setz dessen AutoSize-Eigenschaft auf True. Dann hast du die Breite des Textes. Das Label kannst du außerhalb des sichtbaren Bereichs des Userforms platzieren.
Gruß
Nepumuk
Textlänge in Pixel, Punkt oder ä.
02.12.2017 19:21:23
yogi
Salü Nepomuk
eine gute Idee. Werde mir das mal ansehen.
Gruss
yogi
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Textlänge in Pixel, Punkt oder ä


Schritt-für-Schritt-Anleitung

Um die Textlänge in Excel zu ermitteln, kannst du die folgende Methode verwenden. Diese ist besonders nützlich, wenn du die ListBox für längere Texte nutzen möchtest.

  1. Erstelle ein neues UserForm in deinem Excel VBA-Editor.
  2. Füge eine ListBox und ein Label hinzu. Das Label wird verwendet, um die Textlänge zu messen.
  3. Stelle sicher, dass AutoSize des Labels auf True gesetzt ist.
  4. Verwende den folgenden Code, um die Textlänge zu bestimmen und in der ListBox anzuzeigen:
Private Sub UserForm_Initialize()
    Dim strText As String
    strText = "Hier ist ein Beispieltext, dessen Länge wir ermitteln möchten."

    ' Text in Label setzen
    With Label1
        .Caption = strText
        .AutoSize = True
    End With

    ' Breite des Labels auslesen
    Dim textWidth As Single
    textWidth = Label1.Width

    ' Hier kannst du weitere Logik hinzufügen, um die Textlänge in der ListBox zu verwenden
    ListBox1.AddItem strText ' Beispiel
End Sub

Häufige Fehler und Lösungen

  • Fehler: Text wird nicht vollständig angezeigt
    Lösung: Stelle sicher, dass die ListBox ausreichend Platz hat und die ColumnWidth korrekt eingestellt ist. Eventuell musst du die Textlänge ermitteln und den Text splitten, um Zeilenumbrüche zu simulieren.

  • Fehler: AutoSize funktioniert nicht
    Lösung: Überprüfe, ob die Eigenschaften des Labels korrekt gesetzt sind und ob das Label sichtbar ist, auch wenn es außerhalb des sichtbaren Bereichs platziert ist.


Alternative Methoden

Falls du die Textlänge nicht über ein Label bestimmen möchtest, kannst du auch eine andere Methode in Betracht ziehen. Eine Möglichkeit ist, die Excel VBA-Funktion Len zu verwenden, um die Anzahl der Zeichen zu zählen und basierend auf der Schriftgröße und Schriftart die Breite zu berechnen. Dies ist jedoch weniger genau, da es nicht die tatsächliche Pixelbreite berücksichtigt.


Praktische Beispiele

  1. Beispiel für Textlängenberechnung in Pixeln:
    Mit dem Label und der AutoSize-Eigenschaft kannst du die Breite eines Textes direkt ermitteln. Füge verschiedene Texte hinzu und teste die Breite.

  2. Text in ListBox aufteilen:
    Wenn du einen langen Text hast, der in der ListBox angezeigt werden soll, kannst du den Text in Segmente aufteilen:

Function SplitTextForListBox(theText As String, maxLength As Integer) As Variant
    Dim textArray() As String
    Dim currentPosition As Integer
    currentPosition = 1

    Do While currentPosition <= Len(theText)
        Dim segment As String
        segment = Mid(theText, currentPosition, maxLength)
        ReDim Preserve textArray(0 To (currentPosition \ maxLength))
        textArray((currentPosition \ maxLength)) = segment
        currentPosition = currentPosition + maxLength
    Loop

    SplitTextForListBox = textArray
End Function

Tipps für Profis

  • Nutze die excel vba länge string ermitteln Funktion in Kombination mit der Len-Funktion, um die Textlängen präzise zu ermitteln.
  • Experimentiere mit verschiedenen Schriftarten und -größen, um die besten Ergebnisse zu erzielen.
  • Berücksichtige, dass verschiedene Schriftarten unterschiedliche Breiten für die gleiche Zeichenanzahl haben, wenn du die ColumnWidth anpasst.

FAQ: Häufige Fragen

1. Wie kann ich die Textlänge in Pixel ermitteln?
Du kannst die Breite eines Textes in Pixeln ermitteln, indem du ein Label mit der AutoSize-Eigenschaft verwendest. Setze den Text in das Label und lese dann die Breite aus.

2. Gibt es eine Funktion, um die Textlänge in Excel direkt zu bestimmen?
Ja, du kannst die Len-Funktion verwenden, um die Anzahl der Zeichen in einem Text zu zählen, jedoch nicht die Breite in Pixeln. Für die Pixelbreite musst du die oben genannten Methoden nutzen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige