Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1928to1932
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
UF mit mehrere Textboxen "formatieren"
25.04.2023 15:53:55
David

Hallo zusammen,

ich möchte eine UF als eine Art "Hilfeseite" anzeigen lassen, wobei die Inhalte aus einer Tabelle kommen.
Der bisherige Code lautet:


Private Sub UserForm_Initialize()
    Dim Fragen(1 To 9) As MSForms.Label
    Dim Antworten(1 To 9) As MSForms.TextBox
    Dim Zeilenstart As Integer, Zeilendiff As Integer, Zähler As Integer
    Dim i As Integer
    
    Zeilenstart = 6
    Zeilendiff = 80
    Zähler = 0
    
    For i = 1 To 9
        Set Fragen(i) = Me.Controls("Frage" & i)
        Set Antworten(i) = Me.Controls("Antwort" & i)
        
        Fragen(i).Top = Zeilenstart + (Zähler * Zeilendiff)
        Fragen(i).SpecialEffect = fmSpecialEffectBump
        Fragen(i).BackStyle = fmBackStyleOpaque
        Fragen(i).Font.Size = 12
        Fragen(i).Font.Bold = True
        Fragen(i).Caption = Tabelle1.Range("AD" & 108 + i)
        
        Antworten(i).Top = Zeilenstart + 24 + (Zähler * Zeilendiff)
        Antworten(i).SpecialEffect = fmSpecialEffectBump
        Antworten(i).BackStyle = fmBackStyleOpaque
        Antworten(i).Font.Size = 10
        Antworten(i).Value = Tabelle1.Range("AF" & 108 + i)
        
        Zähler = Zähler + 1
    Next i
End Sub


Bei der Zeile
 
       Set Fragen(i) = Me.Controls("Frage" & i)


kommt allerdings der Fehler "Typen unverträglich".

Wie geht es richtiger?
Danke und Gruß
Dave

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UF mit mehrere Textboxen "formatieren"
25.04.2023 16:04:36
Rudi Maintaire
Hallo,
mach's so:
  For i = 1 To 9
    With Me.Controls("Frage" & i)
      .Top = Zeilenstart + (Zähler * Zeilendiff)
      .SpecialEffect = fmSpecialEffectBump
      .BackStyle = fmBackStyleOpaque
      .Font.Size = 12
      .Font.Bold = True
      .Caption = Tabelle1.Range("AD" & 108 + i)
    End With
    
    With Me.Controls("Antwort" & i)
      .Top = Zeilenstart + 24 + (Zähler * Zeilendiff)
      .SpecialEffect = fmSpecialEffectBump
      .BackStyle = fmBackStyleOpaque
      .Font.Size = 10
      .Value = Tabelle1.Range("AF" & 108 + i)
    End With
    
    Zähler = Zähler + 1
  Next i
Gruß
Rudi


Anzeige
AW: UF mit mehrere Textboxen "formatieren"
27.04.2023 08:41:54
David
Hallo Rudi,

danke, passt. Ausführliche Antwort unter Daniels Beitrag.

Gruß
David


AW: UF mit mehrere Textboxen "formatieren"
25.04.2023 16:05:57
onur
.....
With Me.Controls("Frage" & i)
        .Top = Zeilenstart + (Zähler * Zeilendiff)
        .SpecialEffect = fmSpecialEffectBump
        .BackStyle = fmBackStyleOpaque
        .Font.Size = 12
        .Font.Bold = True
        .Caption = Tabelle1.Range("AD" & 108 + i)
End With
With  Me.Controls("Antwort" & i)
        .Top = Zeilenstart + 24 + (Zähler * Zeilendiff)
        .SpecialEffect = fmSpecialEffectBump
        .BackStyle = fmBackStyleOpaque
        .Font.Size = 10
        .Value = Tabelle1.Range("AF" & 108 + i)
End With       
Zähler = Zähler + 1
Next i


Anzeige
AW: UF mit mehrere Textboxen "formatieren"
27.04.2023 08:42:12
David
Hallo onur,

danke, passt. Ausführliche Antwort unter Daniels Beitrag.

Gruß
David


AW: UF mit mehrere Textboxen "formatieren"
25.04.2023 16:08:48
Daniel
Hi
Deklariere Fragen() und Antworten() als Control

ist das alles, was du mit diesen beiden Variablen machst?
Wenn ja, sind die Variablen hier eigentlich unnötig, ich würde mit der WITH-Klammer arbeiten:

For i = 1 To 9
        With Me.Controls("Frage" & i)
            .Top = Zeilenstart + (Zähler * Zeilendiff)
            .SpecialEffect = fmSpecialEffectBump
            .BackStyle = fmBackStyleOpaque
            .Font.Size = 12
            .Font.Bold = True
            .Caption = Tabelle1.Range("AD" & 108 + i)
        end with
        With Me.Controls("Antwort" & i)
            .Top = Zeilenstart + 24 + (Zähler * Zeilendiff)
            .SpecialEffect = fmSpecialEffectBump
            .BackStyle = fmBackStyleOpaque
            .Font.Size = 10
            .Value = Tabelle1.Range("AF" & 108 + i)
        end with
        Zähler = Zähler + 1
Next i
Gruß Daniel


Anzeige
AW: UF mit mehrere Textboxen "formatieren"
27.04.2023 08:40:59
David
Hallo Daniel,

danke, ich habe jetzt die Lösung von Rudi, die funzt. Soweit ich das erkenne, ist deine aber identisch.
Bin nicht sicher, welche "Variablen" du meinst.

"FrageX" und "AntwortX" sind jeweils Textboxen in der UF, die dann mit dem in der Zelle stehenden Text gefüllt werden. Musste noch das "Caption" in "Value" ändern, dann gings. Ich hatte vorher alles einzeln manuell gefüllt und noch etwas mit der Formatierung "herumgespielt". Da ist das ändern von 18 gleichartigen Objekten natürlich mühsam, weswegen ich eine Schleife gesucht hab. Außerdem ist es damit auch noch skalierbar.
Der vorherige Code kam übrigens mit Hilfe von ChatGPT zustande, da kann man sehen, dass das bei weitem nicht fehlerlos ist. ;-)

Eine "Bonusfrage" hätte ich noch:
Je nach Menge Text sind die Textboxen unterschiedlich gefüllt. Das kann man sicher mit der "Autosize"-Funktion optisch anpassen. Allerdings "weiß" die nachfolgende Textbox ja nicht, wie groß die vorherige ist, so dass hier aus meiner Sicht die Variabilität endet. Gibt es eine unkomplizierte (!) Möglichkeit, die Größe einer Textbox nach dem Füllen irgendwie abzufragen und im Code weiter zu verwenden? Sicher könnte ich versuchen, das irgendwie über die Anzahl Zeichen zu lösen, aber das finde ich recht unelegant, da das je nach gewählter Schriftart und Formatierung teilweise "unvorhersehbar" variiert.
Ich will es aber auch nicht zu umständlich machen. Ansonsten dimensioniere ich die großzügig und gestalte die Verteilung gleichmäßig über die gesamte UF.

Vielen Dank nochmal auch an die beiden anderen.

Gruß
David

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige