Events in Klasse gehen nicht immer
Martin
Durch Klicken in die Userform wird eine Textbox erzeugt, die für einen Job steht.
Dafür gibt es eine Klasse, die u. a. der Textbox Routinen zur Verschiebung und zur Größenänderung mit der Maus mitgibt. Eigenschaften der Job werden in einer Tabelle gespeichert, in der jede Zeile für einen Job steht. Dort wird auch für einen neu anzulegenden Job eine freie Zeile gesucht, deren Index auch die Jobnummer bildet.
Um einerseits Kollisionen zu vermeiden und andererseits eine Speicherung zu ermöglichen, gibt es für jede Resource ein Tabellenblatt, in dem die Ziele für einen Tag und die Spalte für eine Position steht. Da die Positionen nur im 15erraster möglich sind, reichen für eine Resource mit 720 Pixeln (entsprechend Minuten) Breite 720/15=48 Zellen um ihre Belegung zu beschreiben. Dabei steht in jeder Zelle einer belegten Position die entsprechende Nummer des Jobs. Über entsprechende Abfragen beim Bewegen/Verändern einer Textbox werden Überlappungen erkannt.
Wird die Userform mit einem bestimmten Datum aufgerufen, so wird die entsprechende Zeile im Resourcenblatt ausgewertet. Sollten dort Zellen mit Jobnummern belegt sein, so werden die entsprechenden Jobs erzeugt. In den nicht belegten Bereichen können durch Mausklick neue Jobs angelegt werden.
Das funktioniert soweit ganz gut. Das Problem ist, das die neu angelegten Jobs (Textboxen) auf die Mouse_Up und _Down-Ereignisse reagieren wie gewünscht, die aus dem Auslesen des Resourcenblattes entstandenen Jobs aber nicht. Die sind unveränderbar.
Neue Jobs werden so erzeugt (in Formulare - Res01):
Private Sub UserForm_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim JobPos As Integer
Dim Tmp As String
JobPos = Vielfach(X, 15) / 15 + 1
Jobnummer = freieJobnummer()
Set MeinJob(Jobnummer) = New clsJob
Set Temp = Res01.Controls.Add("Forms.TextBox.1")
Set MeinJob(Jobnummer).Jobs = Temp
With MeinJob(Jobnummer)
.Jobs.SpecialEffect = fmSpecialEffectEtched
...
...
Gespeicherte Jobs werden so erzeugt (in Module - Modul1):
Sub Job2Res(Datum As Long, Jobnummer As Long, Start As Integer, Bereich As Integer)
Dim MeinJob(100) As clsJob
Dim Temp As MSForms.TextBox
Dim Resource As String
Resource = ThisWorkbook.Worksheets("JobData").Cells(Jobnummer, 7)
Set MeinJob(Jobnummer) = New clsJob
Select Case Resource
Case "Res01"
Set Temp = Res01.Controls.Add("Forms.TextBox.1")
Case "Res02"
Set Temp = Res02.Controls.Add("Forms.TextBox.1")
End Select
Set MeinJob(Jobnummer).Jobs = Temp
With MeinJob(Jobnummer)
.Jobs.SpecialEffect = fmSpecialEffectEtched
...
...