Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
612to616
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
612to616
612to616
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Frage zu TextBox, die zur Laufzeit erzeugt wird?

Frage zu TextBox, die zur Laufzeit erzeugt wird?
23.05.2005 06:52:27
Oliver
Moin an alle,
ich benötige mal eine kleine Hilfestellung. Ich erzeuge in einer UserForm zur Laufzeit TextBoxen. Nun möchte ich in diese TextBoxen etwas eingeben. Das geht ja. Nur sollen die eingegebenen Daten nach dem Verlassen der Textbox in eine Zelle in dem aktiven Tabellenblatt übertragen werden. Mein Problem ist jetzt, ich weiß nicht, wie ich die erzeugten TextBoxen ansprechen kann, so dass die eingetragenen Daten ins Blatt übertragen werden. Kann mir da jemand eventuell weiter helfen? Nachfolgend noch der Code, der beim Initialisieren der UserForm abgearbeitet wird.

Private Sub UserForm_Initialize()
Anzahl = ActiveSheet.Range("AN7")
If Anzahl = 0 Then Anzahl = 1
For Wiederholungen = 1 To Anzahl
Set Neue_TextBox = Terminkategorien.Controls.Add("Forms.TextBox.1")
With Neue_TextBox
.Height = 20
.Width = 168
.Left = 30
.Top = Wiederholungen * 25
.Visible = True
.Text = Cells(Wiederholungen, 41)
.ForeColor = &HFF0000
.TextAlign = 2
.Font.Name = "Arial"
.Font.Charset = 2
.Font.Underline = True
End With
Next
End Sub

Danke Euch schon mal,
Oliver

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Frage zu TextBox, die zur Laufzeit erzeugt wird?
23.05.2005 12:38:01
Nepumuk
Hallo Oliver,
dazu musst du eine neue Klasse anlegen und die Textboxen an die Klasse verweisen. Wo welcher Eintrag hin soll, steuerst du am besten über die Tag - Eigenschaft.
Gruß
Nepumuk
AW: Frage zu TextBox, die zur Laufzeit erzeugt wird?
23.05.2005 14:19:35
Oliver
Hallo Nepumuk,
danke Dir für Deine ANtwort. Ich habe nun mal ein Klassenmodul hinzugefügt, welches auch soweit zum Teil funktioniert. Nun habe ich aber dazu noch eine Frage, muss ich für jedes Textfeld, welches zur Laufzeit erstellt wird, ein eigenes Klassenmodul anölegen? Im Moment funktioniert das Change-Ereignis immer nur bei dem letzten Textfeld. Dabei ist es Egal, wieviele Textfelder eingefügt werden. Wie muss ich dass den machen, dass das Change-Ereignis bei jeder TextBox ausgeführt wird? Ich hoffe, dass Du mir dazu noch mal eine Antwort geben kannst. Nachfolgend noch mal mein Code und das Klassenmodul:

Private Sub UserForm_Initialize()
Anzahl = ActiveSheet.Range("AN7")
If Anzahl = 0 Then Anzahl = 1
For Wiederholungen = 1 To Anzahl
Set Neu = New clsTextfeld
Set Neu.Neue_TextBox = Terminkategorien.Controls.Add("Forms.TextBox.1")
With Neu.Neue_TextBox
.Name = "Eingabe" & Wiederholungen
.Height = 20
.Width = 150
.Left = 30
.Top = Wiederholungen * 25
.Visible = True
.Text = Cells(Wiederholungen, 41)
.ForeColor = &HFF0000
.TextAlign = 2
.Font.Name = "Arial"
.Font.Charset = 2
.Font.Underline = True
End With
End Sub

Code im Klassenmodul mit dem Namen "clsTextfeld":
Option Explicit
Public WithEvents Neue_TextBox As MSForms.TextBox

Private Sub Neue_TextBox_Change()
MsgBox Neue_TextBox.Tag
End Sub

Danke Dir noch mal und schon mal vor weg für Deine Antwort,
Oliver
Anzeige
AW: Frage zu TextBox, die zur Laufzeit erzeugt wird?
23.05.2005 15:19:18
Nepumuk
Hallo Oliver,
das einfachste ist so:


Option Explicit
Private neu() As New clsTextfeld
Private Sub UserForm_Initialize()
    Dim Anzahl As Integer, Wiederholungen As Integer
    Anzahl = ActiveSheet.Range("AN7")
    If Anzahl = 0 Then Anzahl = 1
    ReDim neu(1 To Anzahl)
    For Wiederholungen = 1 To Anzahl
        Set neu(Wiederholungen).Neue_TextBox = Terminkategorien.Controls.Add("Forms.TextBox.1")
        With neu(Wiederholungen).Neue_TextBox
            .Name = "Eingabe" & Wiederholungen
            .Height = 20
            .Width = 150
            .Left = 30
            .Top = Wiederholungen * 25
            .Visible = True
            .Text = Cells(Wiederholungen, 41)
            .ForeColor = &HFF0000
            .TextAlign = 2
            .Font.Name = "Arial"
            .Font.Charset = 2
            .Font.Underline = True
            .Tag = Wiederholungen
        End With
    Next
End Sub


Gruß
Nepumuk
Anzeige
Noch eine Kleinigkeit, hoffe ich jedenfalls!
23.05.2005 15:29:38
Oliver
Hallo Nepumuk,
Du machst mich fast wunschlos Glücklich. Nun kann ich bei jeder TextBox das Change Ereignis durchführen. Allerdings gibt es noch ein kleines Problem. Mir wird im Moment beim Öffnen für jeden Schleifendurchlauf die MessageBox, aus dem Beispielcode des Klassenmoduls geöffnet. Im Moment ist das die MsgBox, später einmal ein VBA Code, der aber erst ausgeführt werden soll, wenn ich in dem Textfeld eine Eingabe durchgeführt habe und nicht schon beim Öffnen der UserForm. Kann man das irgendwie unterbinden? Wenn das noch machbar wäre, wäre das Ergebnis so, wie ich es mir gedacht habe.
Danke und Gruß,
Oliver
Anzeige
AW: Noch eine Kleinigkeit, hoffe ich jedenfalls!
23.05.2005 15:36:44
Nepumuk
Hallo Oliver,
bei mir hat er nix reingeschrieben, desswegen ist mir das nicht aufgefallen.


Option Explicit
Private neu() As New clsTextfeld
Private Sub UserForm_Initialize()
    Dim Anzahl As Integer, Wiederholungen As Integer
    Dim myTextbox As TextBox
    Anzahl = ActiveSheet.Range("AN7")
    If Anzahl = 0 Then Anzahl = 1
    ReDim neu(1 To Anzahl)
    For Wiederholungen = 1 To Anzahl
        Set myTextbox = Terminkategorien.Controls.Add("Forms.TextBox.1")
        With myTextbox
            .Name = "Eingabe" & Wiederholungen
            .Height = 20
            .Width = 150
            .Left = 30
            .Top = Wiederholungen * 25
            .Visible = True
            .Text = Cells(Wiederholungen, 41)
            .ForeColor = &HFF0000
            .TextAlign = 2
            .Font.Name = "Arial"
            .Font.Charset = 2
            .Font.Underline = True
            .Tag = Wiederholungen
        End With
        Set neu(Wiederholungen).Neue_TextBox = myTextbox
    Next
    Set myTextbox = Nothing
End Sub


Mehr zu Klassen und überhaupt, findest du hier: http://www.online-excel.de/
Gruß
Nepumuk
Anzeige
Es kommt leider ein Laufzeitfehler!
23.05.2005 17:16:26
Oliver
Hallo Nepumuk,
ich muss Dich noch mal bemühen. Wenn ich Deinen Code 1:1 übernehme, kommt ein Laufzeitfehler (13) mit der Meldung Typen unverträglich. Außerdem wird die Zeile
Set myTextbox = Terminkategorien.Controls.Add("Forms.TextBox.1")
markiert und ich weiß mal wieder nicht, warum das so ist. Kannst Du das noch mal prüfen und mir schreiben, warum dieser Fehler auftritt?
Ansonsten wieder Danke für Deine ANtwort. Den Link werde ich mir auch noch ansehen.
Gruß,
Oliver
AW: Es kommt leider ein Laufzeitfehler!
23.05.2005 17:34:58
Nepumuk
Hallo Oliver,
da hatte ich schon mal Probleme. Ändere mal die Zeile:
Dim myTextbox As TextBox
in
Dim myTextbox As Control
Gruß
Nepumuk
Anzeige
Der nächste Laufzeitfehler!
23.05.2005 17:56:36
Oliver
Hallo Nepumuk,
ich will ja nicht nerven, aber jetzt kommt der nächste Laufzeitfehler (424) mit der Meldung "Objekt erforderlich". Beim Klick auf Debuggen wird die Zeile
Sub Termine_öffnen()
gelb markiert. Da ich durch das Ganze, was Du mir da vorgeschlagen hast, nocht nicht so ganz durchgestiegen bin, weiß ich jetzt leider nicht, was da mit Objekt gemeint ist.
Gruß,
Oliver
Der nächste Laufzeitfehler!
23.05.2005 17:58:28
Oliver
Hi ich noch mal,
da habe ich doch glatt vergessen, die richtige Zeile zu kopieren. Also, es wird die Zeile
Set neu(Wiederholungen).Neue_TextBox = myTextbox
gelb markiert.
Danke Dir für Deine Hilfe,
Oliver
Anzeige
AW: Der nächste Laufzeitfehler!
23.05.2005 18:28:42
Nepumuk
Hallo Oliver,
ich weiß nicht, was da falsch läuft. Ich habe dir mal ein funktionierendes Beispiel hochgeladen.
https://www.herber.de/bbs/user/23123.xls
Gruß
Nepumuk
AW: Der nächste Laufzeitfehler!
23.05.2005 19:18:22
Oliver
Hallo Nepumuk,
es funktioniert. Ich hatte vergessen noch eine weitere Zeile
ReDim Neu1(1 To Anzahl)
einzufügen, da ich dort auch noch Labelfelder erstellen lasse und bei Klick auf die, soll ebenfalls etwas ausgeführt werden. Als ich diese Zeile eingefügt hatte, funktionierte es.
Danke Dir für Deine Ausdauer, mir zu helfen.
Wünsche Dir noch einen schönen Abend,
Oliver
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige