Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1160to1164
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
Userform Textboxen
eric
Hallo,
ich bitte um Unterstützung bei dem nachgenannten Problem :
es werden Textboxen für eine Userform erstellt :

Public Const ZEAB01 As Single = 30                      ' Zeilenabstand für
' Boxen usw.
analog werden SP02 , BOXW01 , BOXH01, TxtAbs1 mit Daten versorgt.
 ...
For TxtAnz1 = 1 To ANZBOX                               ' Textboxen erstellen
' ANZBOX Konstante aus mod_Const
' ANZBOX = 10
ReDim Preserve Txtbox1(1 To TxtAnz1)
Set Txtbox1(TxtAnz1) = Frmbox1(2).Controls.Add _
("Forms.TextBox.1", "MyTextBox1")                  ' Erstellung der Textboxen
' Name ist Txtbox1(1-ANZBOX)
With Txtbox1(TxtAnz1)
.Left = SP02                                       ' Abstand links
.Top = TxtAbs1                                     ' Abstand oben
.Width = BOXW01                                    ' Breite
.Height = BOXH01                                   ' Höhe
.MousePointer = 1                                  ' Mausansicht
End With
TxtAbs1 = TxtAbs1 + ZEAB01                             ' Berechnen Abstand
Next
...
in der Userform sind die Textboxen da und auch das füllen mit dem folgenden Bsp. klappt auch :

Txtbox1(1).Value = Date & "    " & Time                    ' Textbox Datum & Zeit
nur wenn ich dann z.B. folgendes einsetzen möchte :

Sub Txtbox1(1)_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'   nur Text zulassen und automatisch Grosschreiben
If Chr(KeyAscii) Like "[a-z A-Z]" = False _
Then KeyAscii = 0
If KeyAscii >= Asc("a") And KeyAscii 
dann erhalte ich die Fehlermeldung :
Fehler beim Kompilieren
Syntaxfehler

, dass liegt sicher an Txtbox1(1)
Nur wie müussen diese dann angesprochen werden oder was muss da als Zusatz noch rein ?
Vielen Dank für Eure Hilfe und Unterstützung im Voraus !
MfG ERIC
AW: Userform Textboxen
06.06.2010 23:10:39
eric
Hallo,
der grösste Teil des Codes für die Erstellung der Textboxen ist aus dem Forum, hab das nur für meine Zwecke angepasst !
MfG ERIC
AW: Userform Textboxen
07.06.2010 17:38:26
ChristianM
Hallo Eric,
Du könntest die Textboxes in eine Klasse packen à la:
Code in der Userform:

Option Explicit
Dim colTxt As New Collection
Private Sub UserForm_Initialize()
Dim objCls As clsTxt
Dim sngTop As Single
Dim i As Long
Const sngDIST As Single = 30
sngTop = sngDIST
For i = 1 To 3
Set objCls = New clsTxt
Set objCls.cntrTxt = Me.Controls.Add("forms.TextBox.1", "txt_" & i, True)
With objCls.cntrTxt
.Left = 15
.Top = sngTop
.Width = 60
.Height = 18
End With
sngTop = sngTop + sngDIST
colTxt.Add objCls
Next
Set objCls = Nothing
End Sub
Code in Klassenmodul "clsTxt":

Option Explicit
Public WithEvents cntrTxt As MSForms.TextBox
Private Sub cntrTxt_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 97 To 122: KeyAscii = KeyAscii - 32
Case 65 To 90
Case Else: KeyAscii = 0
End Select
End Sub

Gruß
Christian
Anzeige
AW: Userform Textboxen
07.06.2010 18:36:57
eric
Hallo Christian,
vielen Dank für Deine Antwort, hab das eben mal getestet, klappt super :
es werden drei Textboxen erstellt
für ALLE Textboxen gilt "nur Text und Gross"
nur wie kann ich jetzt eine von den drei Textboxen einzeln ansprechen
z.B. mit : ?.value = Date & " " & time
Danke für die Hilfe und Unterstützung im Voraus
MfG Eric
AW: Userform Textboxen
07.06.2010 18:50:31
ChristianM
du hast den TextBoxes ja Namen gegeben - also zB so:

Me.Controls("txt_2").Value = Date
Gruß
Christian
AW: Userform Textboxen
07.06.2010 19:28:14
eric
Hallo Christian,
vielen Dank für Deine schnelle Rückantwort, hab das mal wie folgt getestet :

Dim colTxt As New Collection
Dim objCls As clstxt
Dim sngTop As Single
Dim i As Long
Private Sub UserForm_Initialize()
Const sngDIST As Single = 30
sngTop = sngDIST
For i = 1 To 3
Set objCls = New clstxt
Set objCls.cntrTxt = Me.Controls.Add("forms.TextBox.1", "txt_" & i, True)
With objCls.cntrTxt
.Left = 200
.Top = sngTop
.Width = 160
.Height = 18
End With
sngTop = sngTop + sngDIST
colTxt.Add objCls
Next
Set objCls = Nothing
With Me.Controls("txt_1")
.Value = Date
.BackColor = RGB(110, 110, 110)
End With
Me.Controls("txt_2").Value = Time
Me.Controls("txt_3").Value = Now

super !!! DANKE
Ich hab das bisher mit ewig langen :

Dim WithEvents CTLTBO0040201 As MSForms.TextBox
Dim WithEvents CTLTBO0040202 As MSForms.TextBox
Dim WithEvents CTLTBO0040203 As MSForms.TextBox
Dim WithEvents CTLTBO0040204 As MSForms.TextBox
Dim WithEvents CTLTBO0040205 As MSForms.TextBox
Dim WithEvents CTLTBO0040206 As MSForms.TextBox
Dim WithEvents CTLTBO0040207 As MSForms.TextBox
Dim WithEvents CTLTBO0040208 As MSForms.TextBox
Dim WithEvents CTLTBO0040209 As MSForms.TextBox
Dim WithEvents CTLTBO0040210 As MSForms.TextBox
Dim WithEvents CTLTBO0040211 As MSForms.TextBox
Dim WithEvents CTLTBO0040401 As MSForms.TextBox
Dim WithEvents CTLTBO0040402 As MSForms.TextBox
Dim WithEvents CTLTBO0040403 As MSForms.TextBox
Dim WithEvents CTLTBO0040404 As MSForms.TextBox
Dim WithEvents CTLTBO0040405 As MSForms.TextBox
Dim WithEvents CTLTBO0040406 As MSForms.TextBox
Dim WithEvents CTLTBO0040407 As MSForms.TextBox
Dim WithEvents CTLTBO0040408 As MSForms.TextBox
Dim WithEvents CTLTBO0040409 As MSForms.TextBox
Dim WithEvents CTLTBO0040410 As MSForms.TextBox
gemacht, dann jede Box einzeln ...
das wollte ich dringend vereinfachen !
Werd das mal auf Comboboxen und CommandButton versuchen umzusetzen.
Vielen, vielen DANK für Deine Hilfe
MfG ERIC
Anzeige
was so natürlich Kappes ist...
07.06.2010 19:53:01
ChristianM
... denn wenn du im Event vorgibst, dass nur Buchstaben gültig sind, macht es wenig Sinn, die Textboxes anschließend mit Date und Now vorzubelegen (ich geh mal davon aus, das dies nur als Bsp gemeint war).
Des Weiteren:
wenn du hier Code einstellst, ist es für den geneigten Leser und Helfer ganz hilfreich, ein _
Anfang und ein Ende zu erkennen (

Sub und End Sub
sind ja nun nicht so viel Aufwand...)
freut mich, dir geholfen zu haben
Christian
AW: was so natürlich Kappes ist...
07.06.2010 20:29:59
eric
Hallo Christian,
Date, Time und Now waren nur Beispiele !
Stimmt, unvollständige Sachen führen immer wieder zu Fehlern oder ... , sorry.
Kenn das von mir, hab mich schon so oft selbst überlistet !
DANKE
MfG Eric
Anzeige
AW: was so natürlich Kappes ist...
08.06.2010 18:50:48
eric
Hallo Christian,
vielen Dank fürDeine Hilfe,
hab noch ein Problem :
wenn ich auf diese Weise CommandButton erstelle,dann heisssen die z.B. "cbo1_1" ....
Wie kann ich diese dann mit public sub ?_click() ... ansprechen ?
Vielen Dank im Voraus ERIC
PS.: mit label und combobox klappt es super !
Das hat mit dem CommandButton ansich nichts ...
09.06.2010 13:03:49
ChristianM
...zu tun, Eric, wenn's bei den TextBoxes, ComboBoxes etc. funktioniert, sondern eher mit deinem Code.
Ich vermute, dass du die Deklaration des CommandButton-Objektes in der Klasse vergessen hast.
Gruß
Christian
AW: Das hat mit dem CommandButton ansich nichts ...
09.06.2010 19:53:20
eric
Hallo Christian,
Danke für die Rückinfo, ich hab die Deklaration nicht vergessen, ich weis sie nicht !!!
Beschäftige mich erst seit wenigen Tagen mit Klassen !
Ich hoffe Du verlierst die Geduld nicht mit mir.
Das steht in dem Klassenmodul cls_cbo1 momentan drin :
    Public WithEvents cntrCbo1 As MSForms.CommandButton

das in der Userform :

Option Explicit
Dim colLbl1 As New Collection, colTxt1 As New Collection, colCbx1 As New Collection, _
colCbo1 As New Collection
Dim sngTop1 As Single, sngTop2 As Single, sngTop3 As Single, sngTop4 As Single
Dim objCls1 As cls_txt1, objCls2 As cls_cbx1, objCls3 As cls_lbl1, objcls4 As cls_cbo1
Dim i As Integer
Private Sub UserForm_Initialize()
Const sngDIST1 As Single = 30
Const sngDIST2 As Single = 30
Const sngDIST3 As Single = 30
Const sngDIST4 As Single = 30
sngTop1 = sngDIST1
sngTop2 = sngDIST2
sngTop3 = sngDIST3
sngTop4 = sngDIST4
For i = 1 To 5
Set objCls1 = New cls_txt1
Set objCls1.cntrTxt1 = Me.controls.Add("forms.TextBox.1", "txt1_" & i, True)
With objCls1.cntrTxt1
.Left = 200
.Top = sngTop1
.Width = 160
.Height = 18
.Locked = True
End With
sngTop1 = sngTop1 + sngDIST1
colTxt1.Add objCls1
Next
Set objCls1 = Nothing
For i = 1 To 5
Set objCls2 = New cls_cbx1
Set objCls2.cntrCbx1 = Me.controls.Add("forms.ComboBox.1", "cbx1_" & i, True)
With objCls2.cntrCbx1
.Left = 400
.Top = sngTop2
.Width = 160
.Height = 18
End With
sngTop2 = sngTop2 + sngDIST2
colCbx1.Add objCls2
Next
Set objCls2 = Nothing
For i = 1 To 5
Set objCls3 = New cls_lbl1
Set objCls3.cntrLbl1 = Me.controls.Add("forms.Label.1", "lbl1_" & i, True)
With objCls3.cntrLbl1
.Left = 20
.Top = sngTop3
.Width = 160
.Height = 18
.Font.Size = 10
End With
sngTop3 = sngTop3 + sngDIST3
colLbl1.Add objCls3
Next
Set objCls3 = Nothing
For i = 1 To 5
Set objcls4 = New cls_cbo1
Set objcls4.cntrCbo1 = Me.controls.Add("forms.CommandButton.1", "Cbo1_" & i, True)
With objcls4.cntrCbo1
.Left = 600
.Top = sngTop4
.Width = 100
.Height = 18
.Font.Size = 8
End With
sngTop4 = sngTop4 + sngDIST4
colCbo1.Add objcls4
Next
Set objcls4 = Nothing
With Me.controls("lbl1_1")
.Caption = "TESTEN1"
End With
With Me.controls("lbl1_2")
.Caption = "TESTEN2"
End With
With Me.controls("lbl1_3")
.Caption = "TESTEN3"
End With
With Me.controls("lbl1_4")
.Caption = "TESTEN4"
End With
With Me.controls("lbl1_5")
.Caption = "TESTEN5"
End With
With Me.controls("txt1_1")
.Value = Date
End With
With Me.controls("txt1_2")
.Value = Time
End With
With Me.controls("txt1_3")
.Value = Now
End With
With Me.controls("cbx1_1")
.AddItem "FRAU"
.AddItem "HERR"
.AddItem "FIRMA"
End With
End Sub                                                    ' Sub beenden
Die Werte für .additem, .value und .caption sind nur für das Lernen drin !
Ich benötige also nochmals bitte Deine Unterstützung, vielen Dank im Voraus.
MfG ERIC
Anzeige
Events von zur Laufzeit erzeugten Controls
10.06.2010 10:29:07
zur
Hallo Eric,
das Ereignis (z.B. Click) steht dir in der Klasse zur Verfügung. Also analog zu den TextBoxes _ hier für die CommandButtons:

Option Explicit
Public WithEvents cntrCbo1 As MSForms.CommandButton
Private Sub cntrCbo1_Click()
MsgBox "hallo"
End Sub
Dieses Ereignis gilt für alle CommandButton, die du zuvor in eine Collection zusammen gepackt hast.
Btw:
- ich würde CommandButton nicht mit cbo abkürzen, den cbo wird gebräuchlicherweise für ComboBoxes verwendet. Für CommandButtons ist "cmd" üblich (google mal nach: VBA Notation).
- bis auf die Collections können alle anderen Variablen auf Prozedur-Ebene von "UserForm_Initialize" deklariert werden - also packe diese in die Prozedur.
gruß
Christian
Anzeige
AW: Events von zur Laufzeit erzeugten Controls
10.06.2010 19:02:34
zur
Hallo Christian,
vielen Dank für Deine Hilfe und Geduld !
Ich hab das jetzt so "umgebaut" :

'   Klassenmodul cls_cmd1
Option Explicit
Public WithEvents cntrCmd1 As MSForms.CommandButton
Private Sub cntrCmd1_Click()
MsgBox cntrCmd1.Name
End Sub
' **********************************************************************
'   UF zum Lernen
Option Explicit
Dim colLbl1 As New Collection, colTxt1 As New Collection, _
colcbo1 As New Collection, colcmd1 As New Collection
Private Sub UserForm_Initialize()
Dim sngTop1 As Single, sngTop2 As Single, sngTop3 As Single, _
sngTop4 As Single, sngCmd1 As Single
Dim objCls1 As cls_txt1, objCls2 As cls_cbo1, objCls3 As cls_lbl1, _
objcls4 As cls_cmd1
Dim i As Integer
Const sngDIST1 As Single = 30
Const sngDIST2 As Single = 30
Const sngDIST3 As Single = 30
Const sngDIST4 As Single = 30
sngTop1 = sngDIST1
sngTop2 = sngDIST2
sngTop3 = sngDIST3
sngTop4 = sngDIST4
For i = 1 To 5
Set objCls1 = New cls_txt1
Set objCls1.cntrTxt1 = Me.controls.Add _
("forms.TextBox.1", "txt1_" & i, True)
With objCls1.cntrTxt1
.Left = 200
.Top = sngTop1
.Width = 160
.Height = 18
.Locked = True
End With
sngTop1 = sngTop1 + sngDIST1
colTxt1.Add objCls1
Next
Set objCls1 = Nothing
For i = 1 To 5
Set objCls2 = New cls_cbo1
Set objCls2.cntrCbo1 = Me.controls.Add _
("forms.ComboBox.1", "cbo1_" & i, True)
With objCls2.cntrCbo1
.Left = 400
.Top = sngTop2
.Width = 160
.Height = 18
End With
sngTop2 = sngTop2 + sngDIST2
colcbo1.Add objCls2
Next
Set objCls2 = Nothing
For i = 1 To 5
Set objCls3 = New cls_lbl1
Set objCls3.cntrLbl1 = Me.controls.Add _
("forms.Label.1", "lbl1_" & i, True)
With objCls3.cntrLbl1
.Left = 20
.Top = sngTop3
.Width = 160
.Height = 18
.Font.Size = 10
End With
sngTop3 = sngTop3 + sngDIST3
colLbl1.Add objCls3
Next
Set objCls3 = Nothing
For i = 1 To 5
Set objcls4 = New cls_cmd1
Set objcls4.cntrCmd1 = Me.controls.Add _
("forms.CommandButton.1", "cmd1_" & i, True)
With objcls4.cntrCmd1
.Left = 600
.Top = sngTop4
.Width = 100
.Height = 18
.Font.Size = 8
End With
sngTop4 = sngTop4 + sngDIST4
colcmd1.Add objcls4
Next
Set objcls4 = Nothing
Me.controls("lbl1_1").Caption = "TESTEN1"
Me.controls("lbl1_2").Caption = "TESTEN2"
Me.controls("lbl1_3").Caption = "TESTEN3"
Me.controls("lbl1_4").Caption = "TESTEN4"
Me.controls("lbl1_5").Caption = "TESTEN5"
Me.controls("txt1_1").Value = Date
Me.controls("txt1_2").Value = Time
Me.controls("txt1_3").Value = Now
Me.controls("cmd1_1").Caption = "TEST 1"
Me.controls("cmd1_2").Caption = "TEST 2"
Me.controls("cmd1_3").Caption = "TEST 3"
Me.controls("cmd1_4").Caption = "TEST 4"
Me.controls("cmd1_5").Caption = "TEST 5"
With Me.controls("cbo1_1")
.AddItem "FRAU"
.AddItem "HERR"
.AddItem "FIRMA"
End With
End Sub
Beim Click erhalte ich nun für alle CommandBoxen die Ausgabe mit dem Namen, nur wie kann ich
nun die CommandBoxen einzeln für Befehle ansprechen ?
z.B. beim Click auf cmd1_3 :

'   Leeren aller Textboxen
For Each TxtB In Controls                                  ' Objektauswahl
If TypeName(TxtB) = "TextBox" Then                         ' wenn Textbox
TxtB.Value = ""                                            ' dann schreibe
End If
Next TxtB

Vielen Dank im Voraus ERIC
Anzeige
AW: Events von zur Laufzeit erzeugten Controls
11.06.2010 09:52:18
zur
Hallo Eric,
das Ereignis gilt für alle CommandButtons, die in der selben Collection sind. Hier ein Bsp mit entsprechender Aufteilung:
Im KlassenModul "clsCmd":

Option Explicit
Public WithEvents cntrCmd1 As MSForms.CommandButton
Public WithEvents cntrCmd2 As MSForms.CommandButton
Public WithEvents cntrCmd3 As MSForms.CommandButton
Private Sub cntrCmd1_Click()
MsgBox "erste Collection"
End Sub
Private Sub cntrCmd2_Click()
MsgBox "zweite Collection"
End Sub
Private Sub cntrCmd3_Click()
MsgBox "dritte Collection"
End Sub
In Userform:

Option Explicit
Dim colCmd1 As New Collection
Dim colCmd2 As New Collection
Dim colCmd3 As New Collection
Private Sub UserForm_Initialize()
Dim i As Long, sngTop As Single
Dim objCls As clsCmd
sngTop = 15
'CommandButton 1 und 2 in erste Collection:
For i = 1 To 2
Set objCls = New clsCmd
Set objCls.cntrCmd1 = Me.Controls.Add("Forms.CommandButton.1", "cmd_" & i)
With objCls.cntrCmd1
.Left = 15
.Top = sngTop
.Width = 60
.Height = 18
.Caption = i
End With
colCmd1.Add objCls
sngTop = sngTop + 30
Next
'CommandButton 3 und 4 in zweite Collection:
For i = 3 To 4
Set objCls = New clsCmd
Set objCls.cntrCmd2 = Me.Controls.Add("Forms.CommandButton.1", "cmd_" & i)
With objCls.cntrCmd2
.Left = 15
.Top = sngTop
.Width = 60
.Height = 18
.Caption = i
End With
colCmd2.Add objCls
sngTop = sngTop + 30
Next
'CommandButton 5 in dritte Collection:
Set objCls = New clsCmd
Set objCls.cntrCmd3 = Me.Controls.Add("Forms.CommandButton.1", "cmd_" & i)
With objCls.cntrCmd3
.Left = 15
.Top = sngTop
.Width = 60
.Height = 18
.Caption = i
End With
colCmd3.Add objCls
Set objCls = Nothing
End Sub
Gruß
Christian
Anzeige
AW: Events von zur Laufzeit erzeugten Controls
11.06.2010 20:22:56
zur
Hallo Chrstian,
vielen Dank für Deine Hilfe und vorallem für Deine Geduld mit mir !
Hat alles super gepasst !!!!!!! !!!!!!!
Hab für das WE genügend Informationen, bin mir aber sicher weitere Hilfe zu benötigen.
Werd mein WE-Werk sicher hier einstellen !
Danke und mit freundlichen Grüßen aus Niedersachsen ERIC

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige