Office: Variable Zahl der TextBoxes im UserForm

Helfe beim Thema Variable Zahl der TextBoxes im UserForm in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, ich möchte ein VBA-Formular mit TextBoxes anlegen, die man befüllt. Je nach dem, könnte man mehr oder weniger TextBoxes haben. Kann man nun... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Lichtwelle, 25. Mai 2019.

  1. Variable Zahl der TextBoxes im UserForm


    Hallo,

    ich möchte ein VBA-Formular mit TextBoxes anlegen, die man befüllt. Je nach dem, könnte man mehr oder weniger TextBoxes haben. Kann man nun irgendwas machen, damit - je nach Bedarf - mehr oder weniger TextBoxes erscheinen?

    Lösung 1: Die höchste Anzahl TextBoxes einbauen. Unbenötigte TextBoxes werden nicht benutzt.
    -> Geht nicht, weil die Höchtzahl der TextBoxes zumindest theoretisch unbegrenzt ist und wenn ich viele TextBoxes einbaue, werden relativ oft viele leer sein (sieht doof aus und nimmt Platz auf dem Formular umsonst).

    Lösung 2: Wie oben aber (1) die unbenötigten TextBoxes unsichtbar machen (Knopf einbauen, der die nächste TextBox sichtbar macht; also TextBox 1 befüllen, Knopf drücken, TextBox 2 wird sichtbar, befüllen, Knopf drücken, TextBox 3 erscheint usw.) und (2) die Größe des Formulars und des Rahmens der Zahl der sichtbaren TextBoxes anpassen (das müsste gehen oder?).
    -> Da bleibt weiterhin das Problem, dass die Zahl der TextBoxes begrenzt bleibt.

    Habt ihr eine Idee, wie man beim drücken auf den Knopf eine zusätzliche TextBox (bzw. mehrere) erschaffen und sichtbar machen könnte? Also so viele TextBoxes wie man will...

    Für eine bessere Übersichtlichkeit möchte ich, dass alle aktiven TextBoxes gleichzeitig angezeigt werden. (sonst hätte man mit Schaltknöpfen eine einzelne TextBox steuern können und sequenziell den Inhalt verschiedener Einträge eins nach dem anderen durchgehen und in der einzelnen TextBox anzeigen / ändern können -> da fehlte aber die Übersichtlichkeit).

    Habt ihr eine Idee?

    Im Voraus vielen Dank für eure Ideen.

    :)
     
    Lichtwelle, 25. Mai 2019
    #1
  2. Hallo,

    ich stelle die Behauptung auf, dass deine Datei nicht gut aufgebaut ist. Bist du sicher, dass du überhaupt ein Userform benötigst? Ich denke nein. Die Eingaben wären viel besser in einem Tabellenblatt aufgehoben, dort hast du schließlich 10^6 Zeilen zur Verfügung.
    Bedenke, dass du ja jede Textbox irgendwie "verwursten" musst, sprich deren Eingabe muss letztlich ja irgendwohin geschrieben werden. Und das wird am Ende auch nur ein Tabellenblatt sein. Es müsste also bei jeder Erstellung einer neuen Textbox auch per Code neuer Code generiert werden. Und das ist ehrlich gesagt keine Kleinigkeit.

    Erklär doch mal, wozu es überhaupt gut sein soll, dass man unendlich viele Eingabemöglichkeiten hat. Und wo sollen deiner Meinung nach angenommen 500 Textboxen (oder 5000? Oder 500000?) überhaupt auf dem Userform Platz finden?

    Also nochmal, eine professionelle Anwendung verzichtet so gut es geht auf Userforms und verwendet den Platz, den Excel standardmäßig anbietet.
     
    MisterBurns, 27. Mai 2019
    #2
  3. Hallo Welle,

    1. Ein Excel Tabellenblatt bietet dir 17.179.803.648 Zellen, die du als Textbox verwenden kannst. Das tolle daran ist, Mit Zellen kannst du von anfang an auch rechnen, das Anzeigeformat einstellen und sonstige tolle dinge tun. Welchen Vorteil versprichst du dir von einer undefinierten Anzahl an Textboxen in einer UserForm? Und wie willst du das übersichtlich halten?

    2. Wenn es denn trotzdem nicht funktioniert, dich zu überzeugen, kannst du über die .Add()-Methode der .Controls()-Auflistung einer UserForm weitere Steuerelemente hinzufügen. Wenn du diese jedoch nicht an ein Objekt einer selbstgeschriebenen Klasse bindest, kannst du nicht auf die zugehörigen Events reagieren.

    Kannst du vielleicht darstellen, was du mit dem Vorhaben bezweckst? Ich kann mir einfach nicht vorstellen, wo man sinnvollerweise eine unbegrenzte Anzahl an Textboxen benötigen könnte.

    Viele Grüße
    derHöpp

    [Edit: Berni war schon wieder schneller. Dafür hab ich noch gerechnet *Smilie]
     
    derHoepp, 27. Mai 2019
    #3
  4. Variable Zahl der TextBoxes im UserForm

    \@Höpp: *grins *biggrin.gif* *grins
     
    MisterBurns, 27. Mai 2019
    #4
  5. Hi Mr Burns und Hoepp,

    ok, meine Erklärungen waren wohl nicht so klar wie ich dachte.

    Die Zahl der TextBoxes ist zwar theoretisch open end aber soll sich i.d.R. im niedrigen / mittleren einstelligen Bereich befinden. Außerdem handelt es sich nicht um eine einzelne TextBox, die ich immer wieder reproduzieren möchte sondern um einen ganzen Datensatz. Für jeden Datensatz braucht man ca. 10 TextBoxen und Comboboxen. Ich möchte leere Datensätze und unnötigen Platzverbrauch vermeiden.

    Ich möchte also je nach Bedarf weitere Datensätze reproduzieren, die ich dann befüllen kann.

    Warum ein Formular und nicht direkt in die Tabelle die Daten eingeben? Im Formular kann ich die Objekte überall positionieren, wo ich will; in der Tabelle ist man an der Skalierung gebunden. Und ein Formular sieht einfach viel professioneller aus.

    Außerdem habe ich bereits einiges an dem Formular gemacht und möchte diesen Weg weiter gehen.
     
    Lichtwelle, 27. Mai 2019
    #5
  6. \@ derHoepp,

    ich habe mir mal den Befehl angeschaut. Mit folgendem Makro kann ich i TextBoxen erschaffen:

    Private Sub Create_TextBox(i As Integer)

    Dim Nummer As Integer
    Dim CTextBox As Control

    For Nummer = 1 To i

    Set CTextBox = Controls.Add("Forms.TextBox.1")

    With CTextBox
    .Height = 20
    .Width = 100
    .Top = 50 * Nummer
    .Left = 30
    .Value = CTextBox.Name
    End With

    Next Nummer

    End Sub

    Wie kann ich aber den Namen dieser TextBoxen festlegen? Hier werden die Namen vom Rechner so mal vergeben aber ich möchte das selbst bestimmen, also TextBoxi und i indizieren.

    Wie kann ich dann TextBoxen gezielt löschen?
     
    Lichtwelle, 27. Mai 2019
    #6
  7. Ich habe immer noch nicht verstanden, was das werden soll. Ist aber auch egal. Bei 10 Textboxen würde ich mir nicht ins Hemd machen. Einfach 10 Stück vorbereiten, 9 auf unsichtbar setzen. Wird Nr. 1 befüllt, wird Nr. 2 sichtbar (automatisch, ohne Knopf). Wenn Nr. 2 befüllt wird, wird Nr. 3 sichtbar. Usw. usw.

    Das halte ich für ein Gerücht. Ein Formular spricht eher dafür, dass der Ersteller des selbigen sich gut fühlt ("seht her, ich habe Feuer gemacht").

    Das ist bitte keine Kritik an deiner Arbeit, sondern einfach eine Tatsache. Und wenn du bereits weit fortgeschritten mit dem Formular bist, ist es für mich auch nachvollziehbar, wieso du davon nicht mehr abrücken willst.
     
    MisterBurns, 27. Mai 2019
    #7
  8. Variable Zahl der TextBoxes im UserForm

    \@MisterBurns: Wieso keine Kritik, nur Kritik bringt einen weiter. *upps
    PS Ich kann natürlich keine Kritik vertragen, also Vorsicht *boah

    Profis lesen und verstehen Doku

    Rudimentär anhand des Codeschnipsels (Profis benutzen Code-Tags)
    Code:
    und Code:
     
    Storax, 27. Mai 2019
    #8
  9. Moin,

    >> .Value = CTextBox.Name

    was soll der Qualifikator, der ist doch mit With schon gegeben.

    Damit steht dann der Name in der Textbox. Was soll er da?

    Mit
    .name = "TextBox" & i
    vergibst Du einen Namen.
     
    drambeldier, 27. Mai 2019
    #9
  10. EarlFred, 27. Mai 2019
    #10
  11. Hallo Lichtwelle,

    wenn ich es richtig verstehe, möchtest Du ein Formular, mit dem Du beliebig oft Datensätze in der gleichen Form eingeben kannst. Dabei wird ein Datensatz über mehrere Textboxen und Comboboxen befüllt. Dann brauchst Du ein Formular mit genau dieser Art und Anzahl an Elementen und zusätzlich einen Speichern-, einen Abbrechen und einen Neu-Button.

    Wurde ein Datensatz im Formular erfasst, kannst Du dann den Dialog beenden, indem Du den Datensatz speicherst oder abbrichst. Der Neu-Button hingegen lässt den Dialog geöffnet, speichert den Inhalt der Eingabelemente und leert die Eingabeelemente anschließend, um für den nächsten Datensatz bereit zu stehen.

    Je nach Aufwand, den Du betreiben willst, kannst Du auch einen Scrollbar einbauen, mit dem Du durch die gespeicherten Datensätze navigieren kannst. Je nach Anwendungsfall kannst Du Datensätze direkt in einer Tabelle speichern oder Du brauchst ein Speichersystem, dass alle neu eingegebenen Datensätze im Arbeitsspeicher hält, bis entweder abgebrochen oder gespeichert wird.

    Hast Du nur eine Tabelle mit einfachen Datensätzen, reicht die Version, es direkt über die Tabelle zu lösen. Hast Du voneinander abhängige Datensätze, die Du im Formular verwalten willst, brauchst Du zwingend die Zwischenspeicherlösung im Arbeitspeicher.

    Mit voneinander abhängigen Datensätzen meine ich z.B. Eine Adresse, zu der mehrere Personen gehören. Du hast dann den Datensatz Adresse und eindeutig zuzuordnende Personen. Dafür brauchst Du dann zusätzlich ein ID System, um die Datensätze einander zuordnen zu können und für jede Art von Datensatz eine eigene Tabelle.

    Unterm Strich simulierst Du damit eine Datenbankanwendung. Einfache Datensätze in einer Tabelle lassen sich recht einfach verwalten. Wenn Du Richtung voneinander abhängiger Datensätze gehst, wird das beliebig kompliziert und Du brauchst dafür einiges an Erfahrung, um so etwas programmieren zu können. Das ist absolut nix für Anfänger und auch für Fortgeschrittene noch ein dickes Brett. Bei solchen Geschichten kommen dann auch oft datenbanktypische Wünsche, wie Pflichtfelder, Vorbelegungen, usw. auf. Wie gesagt, das wird beliebig aufwändig.

    Viele Grüße,

    Zwenn
     
    Zuletzt von einem Moderator bearbeitet: 9. Februar 2021
    Zwenn, 27. Mai 2019
    #11
  12. Hallo auch noch mal von mir,

    naja... es sieht halt nur professionell aus. Aber gut. Zum Glück zwingen wird man dich nicht können.

    Die .Controls.Add()-Methode hat drei Parameter. Mit dem zweiten kannst du einen Namen festlegen. Wenn dir das nicht selbst aufgefallen ist (spätestens F1 hätte geholfen), wird der folgende Vorschlag eher noch nichts für dich sein:
    Wenn ein Datensatz immer gleich aufgebaut ist, empfiehlt es sich dafür eine eigene Datenklasse zu entwickeln. Über eine Interface-Klasse kannst du dann beliebige Objekte definieren, die die Klasse befüllen können. Es wäre denkbar eine Klasse zu erzeugen, die das Interface dadurch implementiert, dass 10 Steuerelemente in einem beliebigen Container (zum Beispiel eine UserForm) dargestellt werden und die Inhalte ihre Informationen zurücksenden. Gleichzeitig wäre es denkbar, dass eine andere Klasse das Interface so implementiert, dass nacheinander 10 Inputboxes abgefragt werden, oder ein Tabellenblatt zur Eingabe dient, oder eine externe Datenquelle, oder sonstwas.

    Kurz und gut: Am einfachsten verfährst du weiterhin damit, wenn du deine 10 Text- und Comboboxen in einem Frame anordnest, schon die Datenquellen vergibst und dann den Frame 19 Mal kopierst im Designmodus anordnest und die Sichtbarkeit auf False stellst.

    Viele Grüße
    derHöpp
     
    derHoepp, 28. Mai 2019
    #12
  13. Variable Zahl der TextBoxes im UserForm

    Hallo an Alle,

    Ich möchte mich bei allen bedanken für eure guten Vorschläge. Es ist echt Klasse, wir ihr einem Laien zur Hilfe kommt.

    @ Zwenn: An etwas ähnliches hatte ich auch gedacht. Problem ist aber, dass man mit so einer Periskop-Sicht nicht alle aktive Einträge auf einmal überblicken kann.

    @ der Hoepp: Ja, das hört sich in der Tat kompliziert an mit dieser Datenklasse.

    Ich glaube, ich werde einfach die Datensätze wie vorgeschlagen einbauen und nach Bedarf (un)sichtbar machen und die Größe des Formulars auch dementsprechend anpassen. Ich habe auch die Daten anders aufgebaut in den Excel-Tabellen (zur Speicherung), sodass ich nun Platz habe dafür.

    Nochmal vielen Dank.
     
    Lichtwelle, 28. Mai 2019
    #13
  14. *Smilie Das war absichtlich so, damit du den einfachen Weg nimmst.
     
    Zuletzt von einem Moderator bearbeitet: 9. Februar 2021
    derHoepp, 28. Mai 2019
    #14
  15. ...dann hättest Du Dir die Nachfrage hier auch sparen können....*biggrin.gif*
    Flexibel kannst Du nur über Klassenprogrammierung darauf reagieren.
    Im Anhang mal ein Beispiel. Kannst ja in Tabelle1 mal eine Spalte hinzufügen und beobachten was beim Neustart passiert.
    Die Demo erhebt keinen Anspruch auf Sinnhaftigkeit oder Vollständigkeit. Sie tut genau das, wofür Demos da sind. Sie demonstriert....*wink.gif*

    Selbstverständlich wäre es sinnvoll, sich auch eine entsprechende Labelklasse zu erstellen und die Labels über den Textboxen zu platzieren... und... na ja... und, und und....
     
Thema:

Variable Zahl der TextBoxes im UserForm

Die Seite wird geladen...
  1. Variable Zahl der TextBoxes im UserForm - Similar Threads - Variable Zahl TextBoxes

  2. Variable Anzahl immer 9er Kombination StellenBerechnung

    in Microsoft Excel Hilfe
    Variable Anzahl immer 9er Kombination StellenBerechnung: Hallo schönen Guten Abend mit Bauchweh, das ich bereits habe bei meiner Nicht weiter kommenden Formel. Folgendes Es lässt sich Schwer beschreiben doch ich versuche es Ich habe in J3 einen Wert...
  3. Makro für variable Anzahl von Datensätzen

    in Microsoft Excel Hilfe
    Makro für variable Anzahl von Datensätzen: Hallo zusammen, ich habe wieder einmal ein kleines Excel-Problem, bei dem Ihr mir sicherlich helfen könnt. Ich habe eine Excel-Liste, das ist ein Export aus einem anderen Programm (siehe...
  4. In einer variablen Zählen

    in Microsoft Excel Hilfe
    In einer variablen Zählen: Guten Tag, ich wollte eigentlich nur testweise ein simples Programm schreiben welches ich direkt ausführen kann ohne den Umweg über Excel +F11 gehen zu müssen. Überraschender Weise war das...
  5. Variable gatt teilbar durch eine Zahl

    in Microsoft Excel Hilfe
    Variable gatt teilbar durch eine Zahl: Hallo zusammen, ich benötige mal eine kurze Zeile. Ich muss prüfen, ob eine bestimmte Variable durch eine Zahl teilbar ist (ohne Rest). Wie macht man das am besten? Sozusagen: Code: If Rest von...
  6. Zahlen addieren in einem Variablen Bereich A2:AXX

    in Microsoft Excel Hilfe
    Zahlen addieren in einem Variablen Bereich A2:AXX: Hi wie kann ich denn Zahlen in einem Bereich addieren, wo die größe des Bereichs von einer anderen Zahl abhängt ? =SUMME(A2:AX) x = wert in einer anderen Zelle ? lg Phoenix
  7. Einer Variablen Zahl den Wert 7 zuordnen

    in Microsoft Excel Hilfe
    Einer Variablen Zahl den Wert 7 zuordnen: Hallo liebes Team Ich habe mal wieder ein Problem Ich wollte einer Variablem Zahl den Wert 7 zurordnen und weiss nicht wie ich das machen soll. F12 soll eine zahl oder ein Buchstabe rein,...
  8. Variable Prozent und Absolute Zahlen

    in Microsoft Excel Hilfe
    Variable Prozent und Absolute Zahlen: Ich bin mit Excel noch nicht soo fit, vielleicht kann mir hier jemand helfen? Ich habe eine Tabelle wie folgt aufgebaut: In Spalte A stehen Kostenbezeichnungen (Miete, Steuern, etc.). In...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden