Thema Datum  Von Nutzer Rating
Antwort
Rot Klassenmodul
12.12.2022 19:25:12 Ray
NotSolved
12.12.2022 21:06:01 Mase
NotSolved
13.12.2022 01:26:24 Gast54923
Solved

Ansicht des Beitrags:
Von:
Ray
Datum:
12.12.2022 19:25:12
Views:
688
Rating: Antwort:
  Ja
Thema:
Klassenmodul

Hi Leute, bin noch sehr neu, was Klassenmodule angeht, aber irgendwie geht eines in meinen Kopf nicht rein und ich finde einfach seit Stunden keinen Weg :/

 

Das hier steht bei mir in der Klasse drin, 

Option Explicit

Public WithEvents DelEvent As MSForms.Image
    
Private Sub DelEvent_click()

Application.ScreenUpdating = False
Dim x As Integer
ItemNumber = ((DelEvent.Top - 14) / 30)
ItemNumber = ItemNumber + 1
RolesDisciplines.Controls.Remove ("TextBox" & ItemNumber)
RolesDisciplines.Controls.Remove ("Minus" & ItemNumber)
If ItemNumber < ItemRange Then
    For x = ItemNumber To ItemRange - 1
        RolesDisciplines.Controls("TextBox" & x + 1).Move 12, RolesDisciplines.Controls("TextBox" & x + 1).Top - 30
        RolesDisciplines.Controls("Minus" & x + 1).Move 272, RolesDisciplines.Controls("Minus" & x + 1).Top - 30
        RolesDisciplines.Controls("TextBox" & x + 1).Name = "TextBox" & x
        RolesDisciplines.Controls("Minus" & x + 1).Name = "Minus" & x
    Next x
End If
RolesDisciplines.Controls("Plus").Move 272, RolesDisciplines.Controls("Plus").Top - 30
ItemRange = ItemRange - 1
RolesDisciplines.Height = RolesDisciplines.Height - 30

Erase DelArray
For x = 0 To ItemRange - 1
    ReDim Preserve DelArray(x)
    DelArray(x).DelEvent = RolesDisciplines.Controls.Item("Minus" & x + 1)
Next x

Application.ScreenUpdating = False

End Sub

 

 

Das in der UserForm:

Private Sub UserForm_Initialize()

Dim RD As Object
Set RD = RolesDisciplines
ItemNumber = 1
yDD = 2
TopCounter = 12
RD.BackColor = RGB(255, 255, 255)
Dim x As Integer
Dim LineCounter As Integer
LineCounter = 37
Dim CodeModule As Object
If Roles = True Then
    x = 1
Else
    x = 3
End If
Do While Sheets("Dropdown Menu").Cells(yDD, x).Value <> Empty
    Set NewTB = RD.Controls.Add("Forms.TextBox.1")
    Set NewMinus = RD.Controls.Add("Forms.Image.1")
    With NewTB
        .Left = 12
        .Top = TopCounter
        .Width = 250
        .Text = Sheets("Dropdown Menu").Cells(yDD, x).Value
        .BackColor = RGB(30, 100, 130)
        .BorderStyle = fmBorderStyleNone
        .Font = "Bahnschrift SemiLight Condensed"
        .Font.Size = 16
        .ForeColor = RGB(255, 255, 255)
        .SpecialEffect = fmSpecialEffectFlat
        .Height = 24
        .Name = "TextBox" & ItemNumber
    End With
    With NewMinus
        .Left = 272
        .Top = TopCounter + 2
        .Width = 21
        .Height = 21
        .BorderStyle = fmBorderStyleNone
        .BackColor = RGB(255, 255, 255)
        .Picture = RD.Minus.Picture
        .PictureAlignment = fmPictureAlignmentCenter
        .PictureSizeMode = fmPictureSizeModeClip
        .Name = "Minus" & ItemNumber
    End With
    
    ReDim Preserve DelArray(yDD - 2)
    Set DelArray(yDD - 2).DelEvent = NewMinus

    LineCounter = LineCounter + 12
    TopCounter = TopCounter + 30
    yDD = yDD + 1
    ItemNumber = ItemNumber + 1
Loop

ItemRange = ItemNumber - 1
Me.Height = TopCounter + 65
Me.Plus.Top = TopCounter + 2

Me.Show

End Sub

 

Und die Variablen hier sind nochmal in einem anderen Modul definiert:

Public ItemCounter As Integer
Public Roles As Boolean
Public ItemRange As Integer
Public ItemNumber As Integer
Public DelArray() As New DelEventClass
Public CacheDelArray() As New DelEventClass
Public NewTB As MSForms.TextBox
Public NewMinus As MSForms.Image

 

Aus irgendeinem Grund gibt mir VBA bei der Klasse bei der Zeile:

DelArray(x).DelEvent = RolesDisciplines.Controls.Item("Minus" & x + 1)

den Fehler "Objektvariable oder With-Blockvariable nicht festgelegt" aus. Wieso? Die Variable DelEvent ist vom Typ Image und auch RolesDisciplines.Controls.Item("Minus" & x + 1) ist vom Typ Image. Vor allem funktioniert der selbe Befehl in der Userform selbst ohne Probleme, nachdem, das Image erstellt wurde. Habe versucht, zwei Arrays aus derselben Klasse zu erstellen, aber auch zwischen denen kann ich die Daten nicht hin und her transferieren. Muss aber irgendwie aus dem Array die leeren Felder rausbekommen, sobald die Images in der UserForm gelöscht wurden, sonst funktioniert das ganze nicht dynamisch :/

Jemand eine Ahnung oder schonmal mit dem selben Problem zu kämpen gehabt?

Viele Grüße

Ray :)


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Klassenmodul
12.12.2022 19:25:12 Ray
NotSolved
12.12.2022 21:06:01 Mase
NotSolved
13.12.2022 01:26:24 Gast54923
Solved