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

Click- und Enter-Ereignisse in einer Schleife?

Click- und Enter-Ereignisse in einer Schleife?
07.09.2005 13:13:12
ChrisBee
Hallo Rätzelfans...
Dank Euerer Hilfe ist mein Projekt inzwischen nun schon richtig weit fortgeschritten.
Nun würde ich gerne versuchen eines der UserForms ein wenig zu vereinfachen,
da es inzwischen wirklich umfangreiche Funktionen enthält, aber auch einen
unheimlich langen Code.
Das UserForm enthält eine MultiPage mit zwei Seiten und jede Seite dann
unter anderem 8 OptionButtons, 8 Label und 8 Textfelder.
Deren Code sieht im Moment so aus:

Private Sub optKms1_Click()
optKms1.Value = True
txtKms1.Locked = False
txtKms1.BorderStyle = fmBorderStyleSingle
txtKms1.BackStyle = fmBackStyleOpaque
txtKms1.Value = "0,01"                  'nur diese beiden Zeilen ändern sich jeweils zu
Label1.Tag = "0,01"                     '0,02; 0,05; 0,10; 0,20; 0,50; 1,00; 2,00
txtKms1.SetFocus
Call plus
End Sub


Private Sub Label1_Click()
Call txtStyle
Label1.Tag = "0"
optKms1.Value = False
txtKms1.Value = ""
Call plus
Call EKplus
End Sub


Private Sub txtKms1_Enter()
Call txtStyle
If optKms1.Value = True Then
txtKms1.BorderStyle = fmBorderStyleSingle
txtKms1.BackStyle = fmBackStyleOpaque
txtKms1.Locked = False
End If
End Sub


Private Sub txtKms1_Exit()
Call EKplus
End Sub

Das Ganze folgt nun 8x hintereinander, wobei sich jeweils nur die Zahl in den zwei
markierten Zeilen ändert und aus jeder 1 im Code wird eine 2, dann 3 usw...
Für MultiPage 2 dann nochmal das Gleiche mit einer 0 vor jeder Zahl. (01, 02...)
Macht zusammen 64 fast völlig identische Code-Einträge.
Kann man aus diesem Code eine Art Schleife bilden, damit ich nicht jedes
Ereignis für jedes einzelne Steuerelement extra auflisten muß?
Das würde den Code erheblich kürzen und wieder übersichtlicher machen.
Sonnige Grüße
ChrisBee

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

Betreff
Datum
Anwender
Anzeige
AW: Click- und Enter-Ereignisse in einer Schleife?
07.09.2005 13:29:30
Fred
Hi,
nimm ein Unterprogramm, dem du die Namen der Controls und die Werte übergibst.
mfg Fred
AW: Click- und Enter-Ereignisse in einer Schleife?
07.09.2005 13:30:33
Uduuh
Hallo,
dafür müsstest du eigene Klassen programmieren. Eine einfachere Variante könnte nach diesem Schema laufen:

Private Sub optKms1_Click()
Call OptClick(1)
End Sub

Sub OptClick(n as byte)
myArray=Array(0,0.01,0.05,0.1,0.2,0.5,1,2)
With UserForm1
.Controls("optKms" &n).Value = True
With .Controls("txtKms" &n)
.Locked = False
.BorderStyle = fmBorderStyleSingle
.BackStyle = fmBackStyleOpaque
.Value = myArry(n)
.SetFocus
End With
.controls("Label" &n).Tag = myArray(n)
End With
Call plus
End Sub
Gruß aus’m Pott
Udo

Anzeige
AW: Click- und Enter-Ereignisse in einer Schleife?
07.09.2005 13:54:32
ChrisBee
Hallo Udo.
Danke für den Ansatz. Den kann ich sogar einigermaßen nachvollziehen. ;o)
Das würde aber bedeuten das ich immernoch 64 einzelne Einträge machen muß.
...nur eben kürzer.
Frage: Kann man das n dann auch mit 01 benennen und Call OptClick(01) schreiben?
Bzw. Klassen programmieren klingt sehr interessant. Geht das auch noch kürzer?
Nochmal Grüße
ChrisBee
AW: Click- und Enter-Ereignisse in einer Schleife?
07.09.2005 21:18:41
Uduuh
Hallo,
mit ner eigenen Klasse geht das bestimmt kürzer. Da kenn ich mich aber auch nicht aus. Ein Top-Tutorial, das ich auch an einer eigenen Anwendung nachvollziehen konnte, findest du hier:
http://www.online-excel.de/excel/grusel_vba.php?f=7
Mit '01' geht das auch, da musst du dann nur entsprechend übergeben.
Call optClick("01")
und entsprechend
Sub optClick(n as String)
Gruß aus’m Pott
Udo

Anzeige
AW: Click- und Enter-Ereignisse in einer Schleife?
07.09.2005 21:39:54
ChrisBee
Ich hab das heute mal entsprechend Deinem Ansatz komplett umgebaut.
Der Code ist nun schon um einiges übersichtlicher.
Aber trotz dieser enormen Codekürzungen hat sich die Datei-Größe kaum verändert.
...eigentlich seltsam.
Naja... Aussehen tut das jetzt so:

Sub OptClick(n As Byte)
Dim myArray
Dim X As String
myArray = Array(0, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1#, 2#)
If KMSMaske.MultiPage1.Value = "0" Then
X = n
Else
X = ("0" & n)
End If
With KMSMaske
.Controls("optKms" & X).Value = True
With .Controls("txtKms" & X)
.Locked = False
.BorderStyle = fmBorderStyleSingle
.BackStyle = fmBackStyleOpaque
.Value = Format(myArray(n), "0.00")
.SetFocus
End With
.Controls("Label" & X).Tag = myArray(n)
End With
Call plus
End Sub

...und laufen tuts auf jeden Fall astrein.
Richtige Klassen zu schreiben scheint mir selbst ein wenig zu kompliziert zu sein.
Also nochmal Danke für Deine Mühe.
ChrisBee
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige