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

change-ereignis bei dynamisch erstellten Controls

change-ereignis bei dynamisch erstellten Controls
17.03.2008 14:32:53
Thomas
Hallo,
leider bin ich wieder einmal an meine Grenzen gestoßen, dabei fing's ganz gut an.
Folgendes Problem:
Sobald die Anzahl der Positionen einer Rechnung größer als eins ist, sollen diese in einer neuen UserForm aufgelistet werden und bei Bedarf geändert werden können.
Dazu habe ich eine UserForm namens 'Positionen' erstellt, auf welcher sich lediglich das Frame100 mit vertikalem Scrollbar befindet. In dieses Frame100 hinein werden nun gemäß der Anzahl der Positionen weitere Frames erzeugt. In jedes dieser Frames kommen dann Text- und ComboBoxen mit den Angaben für die jeweilige Position.
Um das zu erreichen habe ich in einem Modul Namens 'n_Positionen' folgendes stehen:
Option Explicit
Dim new_ctl As MSForms.Control '
Dim ctl_Rah(98) As Variant ' Frame Nr
Dim Oben_Rah(98) As Variant ' Frame Top
Dim ctl_Art(98, 8) As Variant ' Control Art u. Nr
Dim Höhe_Box As Variant ' Text- und Combo-Box Height
Dim Links_Box As Variant ' Text- " Left
Dim Oben_Box As Variant ' Text- " Top
Dim Breite_Box As Variant ' Text- " Width
Dim Höhe_Lbl As Variant ' Label Height
Dim Links_Lbl As Variant ' Label Left
Dim Oben_Lbl As Variant ' Label Top
Dim Breite_Lbl As Variant ' Width Width
Dim Lbl_Cap As Variant ' Label Caption

Sub multi_Positionen_erstellen()
Dim m As Integer
Dim n As Integer
For m = 0 To (Anz_Pos - 1)
' Rahmen-Name analog der Positions-Nr.
ctl_Rah(m) = "Frame" & Str(100 + (m + 1) * 10)
' Positionierung der Rahmen
Oben_Rah(m) = (6 + (m * 102))
' Controls-Art Text- oder ComboBox
For n = 0 To 8
If ((n = 4) Or (n = 6)) Then
ctl_Art(m, n) = "ComboBox" & Str(100 + (m + 1) * 10) + (n)
Else
ctl_Art(m, n) = "TextBox" & Str(100 + (m + 1) * 10) + (n)
End If
Next n
Next m
' Positionierung der Text- und Combo-Boxen
Höhe_Box = Array(18, 18, 54, 18, 18, 18, 18, 18, 18)
Links_Box = Array(5, 30, 82, 386, 453, 493, 82, 386, 493)
Oben_Box = Array(15, 15, 15, 15, 15, 15, 72, 72, 72)
Breite_Box = Array(22, 48, 300, 63, 36, 63, 300, 63, 63)
' Positionierung und Beschriftung der Labels
Höhe_Lbl = Array(9, 9, 9, 9, 9, 9, 15, 9, 9)
Links_Lbl = Array(5, 30, 82, 386, 453, 493, 6, 386, 493)
Oben_Lbl = Array(4, 4, 4, 4, 4, 4, 74, 60, 60)
Breite_Lbl = Array(22, 29, 76, 42, 30, 55, 72, 54, 66)
Lbl_Cap = Array("Pos.", "Menge", "Warenbezeichnung", _
"Einzelpreis", "Einheit", "Gesatpreis", _
"Ergänzungszeile", "Einzelpreis EZ", "Gesamtpreis EZ")
' Gesamt-Rahmen Scroll-Bereich festlegen
Positionen.Frame100.ScrollHeight = 103 * Anz_Pos
For m = 0 To (Anz_Pos - 1)
' Positions-Rahmen erstellen
Set new_ctl = Positionen.Controls("Frame100") _
.Controls.Add("Forms.Frame.1", ctl_Rah(m), True)
new_ctl.Move Left:=6, Top:=Oben_Rah(m), Width:=564, Height:=96
' Control Text- bzw. Combo-Box erstellen und positionieren
For n = 0 To 8
If ((n = 4) Or (n = 6)) Then
Set new_ctl = Positionen.Controls(ctl_Rah(m)) _
.Controls.Add("Forms.ComboBox.1", ctl_Art(m, n), True)
Else
Set new_ctl = Positionen.Controls(ctl_Rah(m)) _
.Controls.Add("Forms.TextBox.1", ctl_Art(m, n), True)
End If
new_ctl.Move Left:=Links_Box(n), Top:=Oben_Box(n), _
Width:=Breite_Box(n), Height:=Höhe_Box(n)
With new_ctl
.Font.Size = 10
.Text = ctl_Art(m, n)
If n = 0 Then
.Text = Format((m + 1), "0#")
.Enabled = False
End If
End With
' Control Label erstellen, positionieren und beschriften
Set new_ctl = Positionen.Controls(ctl_Rah(m)) _
.Controls.Add("Forms.Label.1", "Label" & n, True)
new_ctl.Move Left:=Links_Lbl(n), Top:=Oben_Lbl(n), _
Width:=Breite_Lbl(n), Height:=Höhe_Lbl(n)
With new_ctl
.Caption = Lbl_Cap(n)
If n = 6 Then
.SpecialEffect = fmSpecialEffectEtched
.TextAlign = fmTextAlignCenter
End If
End With
Next n
Next m
End Sub


Nun werden in die einzelnen Text- und Combobexen Werte eingetragen:


Sub multi_Positionen_eintragen()  ' Werte in Text- und Combo-Boxen eintragen
Dim m As Integer
Dim n As Integer
Dim Zeile As Integer
Zeile = DatenZeile1
For m = 0 To (Anz_Pos - 1)
For n = 1 To 8
Positionen.Controls(ctl_Art(m, n)).Text = Cells(Zeile, n + 21)
Next n
Zeile = Zeile + 1
Next m
End Sub


Wie kann ich aber jetzt für jede Text- oder ComboBox, sofern diese verändert wurde, ein Change-Ereignis erzeugen um die Daten entsprechend neu zu berechnen und wieder in die Tabelle zu schreiben?
Das Ganze soll wie gesagt nicht am Ende durch einen Button "neu berechnen" o.ä. erfolgen, sondern fortlaufend bei jeder Änderung in der UserForm neu dargestellt und gegebenen Falls auch neu berechnet werden.
Das einzige was mir dazu einfällt ist ein Change_Ereignis, aber dies habe ich nicht hinbekommen.
Viele Grüße
Thomas

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: change-ereignis bei dynamisch erstellten Contr
17.03.2008 14:36:32
Rudi
Hallo,
dazu musst du eine eigene Klasse für die Elemente erstellen.
guter Einstieg: http://www.online-excel.de/excel/grusel_vba.php?f=7
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

AW: change-ereignis bei dynamisch erstellten Controls
17.03.2008 14:38:00
Heiko
Hallo Thomas,
da hilft es dann wohl nichts, du mußt dich weiterentwickeln und eine eigene Klasse dafür erstellen.
Alles weitere dazu findest du hier http://www.online-excel.de/excel/grusel_vba.php?f=7
Wenn du da durch bist klappt es auch mit dem Change !!!
Gruß Heiko
PS: Rückmeldung wäre nett !

Anzeige
AW: change-ereignis bei dynamisch erstellten Controls
17.03.2008 14:57:00
Thomas
Hallo Rudi,
Hallo Heiko,
vielen Dank für Eure schnell Antworten.
Ihr habt damit meine schlimmsten Befürchtungen erfüllt. :-(
Von Klassen weiß ich gerade mal, daß es sie geben soll.
Viele Grüße
Thomas

AW: change-ereignis bei dynamisch erstellten Controls
17.03.2008 15:04:00
Renee
Hi Thomas,
Ihr habt damit meine schlimmsten Befürchtungen erfüllt. :-(
Du musst es nur positiv sehen:
Ihr habt damit meine besten Chancen bestätigt. :-)
Aber offen lassen der Frage nützt nix, da es keine andere Lösung gibt!
GreetZ Renée

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige