Hi,
An diejenigen die meine Beiträge diese Woche verfolgt haben, danke für eure Geduld.
Es geht um foglendes, jemand in diesem Forum hat mir bei der Lösung eines Problems diese Woche die Idee Klassenmodule für Userforms geziegt. jetzt habe ich ein zweites Problem das ich sehr ähnlich lösen will. Hier die Kurzfassung:
Klasse: FilterLine mit Eigenschaften: Filter, Operator und Options alles sind Comboboxen Methoden sind: Add, Remove, fillFilter, fillOperator und fillOptions
sollte alles ziemlich selbst redend sein was was macht. Add und Remove sollen in einer Userform alle Buttons + Logo verschieben und eine neue FilterLine erstellen mit den drei Comboboxen und diese positionieren. Remove das umgekehrte: löschen verschieben, verkleinern. Die fillFunktionen sollen diejeweiligen Comboboxen dann mit items versorgen. Jetzt mein Problem:
Option Explicit
Public WithEvents Filter As MSForms.Combobox
Public WithEvents Operator As MSForms.Combobox
Public WithEvents Options As MSForms.Combobox
Public Index As Integer
Public Sub Add()
Dim Filter As MSForms.Combobox, Options As MSForms.Combobox, Operator As MSForms.Combobox
' Move Buttons and increase userforms size
frmFilter.Height = frmFilter.Height + 50
frmFilter.AddFilter.Move Top:=frmFilter.AddFilter.Top + 50
frmFilter.Logo.Top = frmFilter.Logo.Top + 50
frmFilter.RemoveFilter.Top = frmFilter.RemoveFilter.Top + 50
frmFilter.Backbtn.Top = frmFilter.Backbtn.Top + 50
frmFilter.GO_btn.Top = frmFilter.GO_btn.Top + 50
' Add Filter, Operator and Options
' Filter
Set Filter = frmFilter.Controls.Add("Forms.ComboBox.1", "Filter" & (Index), True)
With Filter.Font
.name = "Arial"
.Size = 16
.Bold = True
End With
Filter.Top = frmFilter.DefaultFilter.Top + 50 * (Index)
Filter.Left = frmFilter.DefaultFilter.Left
Filter.Width = frmFilter.DefaultFilter.Width
Filter.Height = frmFilter.DefaultFilter.Height
'Operator
Set Operator = frmFilter.Controls.Add("Forms.ComboBox.1", "Operator" & Index, True)
With Operator.Font
.name = "Arial"
.Size = 16
.Bold = True
End With
Operator.Top = frmFilter.DefaultOperator.Top + 50 * (Index)
Operator.Left = frmFilter.DefaultOperator.Left
Operator.Width = frmFilter.DefaultOperator.Width
Operator.Height = frmFilter.DefaultOperator.Height
'Options
Set Options = frmFilter.Controls.Add("Forms.ComboBox.1", "Options" & Index, True)
With Options.Font
.name = "Arial"
.Size = 16
.Bold = True
End With
Options.Top = frmFilter.DefaultOptions.Top + 50 * (Index)
Options.Left = frmFilter.DefaultOptions.Left
Options.Width = frmFilter.DefaultOptions.Width
Options.Height = frmFilter.DefaultOptions.Height
Call fillOperator
Call fillOptions
Index = Index + 1
frmFilter.RemoveFilter.Enabled = True
End Sub
Public Sub Remove()
Index = Index - 1
frmFilter.Controls.Remove ("Filter" & Index)
frmFilter.Controls.Remove ("Options" & Index)
frmFilter.Controls.Remove ("Operator" & Index)
frmFilter.Height = frmFilter.Height - 50
frmFilter.Logo.Top = frmFilter.Logo.Top - 50
frmFilter.Backbtn.Top = frmFilter.Backbtn.Top - 50
frmFilter.GO_btn.Top = frmFilter.GO_btn.Top - 50
frmFilter.RemoveFilter.Top = frmFilter.RemoveFilter.Top - 50
frmFilter.AddFilter.Top = frmFilter.AddFilter.Top - 50
If Index = 1 Then
frmFilter.RemoveFilter.Enabled = False
End If
End Sub
Public Sub fillFilter()
Debug.Print "Here Filter: " & Filter.name & " will be filled."
End Sub
Private Sub fillOperator()
Debug.Print "Here Operator: " & Operator.name & " will be filled."
End Sub
Private Sub fillOptions()
Debug.Print "Here Options: " & Options.name & " will be filled."
End Sub
Wenn ich in der Funktion .Add die fillOperator oder fillOptions Funktion aufrufe, dann sind im Aufruf der Funktion die Eigenschaften Nothing also z.b wären debug.print Option.name in der sub filloptions gibt ein Fehler, da das Objekt nicht verfügbar ist. Ich dachte innerhalb des Klassenmoduls kann ich alle Public Eigenschaften per Namen ansprechen. Wo ist mein Fehler? Ich reiss mir die Haare aus..
Grüsse
|