Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Schaltfläche dynamisch wieder löschen - Objektorientierte Programmierung
#1
Hallo meine VBA Helden,

ich habe auf meiner Userform 2 (nichtdynamische) CommandButtons. Den ersten Button habe ich so programmiert,
dass dieser eine weitere Schaltfläche mit einem kleinen Text dynamisch erzeugt und auf die Userform bringt. Das klappt
perfekt.
 
Für den zweiten CommandButton suche ich nun den passenden Code, um die soeben dynamisch erzeugte Schaltfläche wieder
löschen zu können. Das klappt überhaupt nicht.

Userform:
Code:
Option Explicit
Dim Befehle(200) As New clsElemente

Private Sub ErzeugeButton_Click()
Dim i As Integer
i = 200
Dim objVar As MSForms.CommandButton
Set objVar = Me.Controls.Add("Forms.CommandButton.1", "" & i, True)

With objVar
.Width = 230
.Height = 30
.Left = 300
.Top = 50
.Caption = "Hallo, ich wurde gerade dynamisch erzeugt. Klick mich!"
End With

Set Befehle(200).Knöpfe = objVar
End Sub
Private Sub LöscheButton_Click()
'Wie löscht man den gerade erzeugten Button ??

End Sub


Private Sub UserForm_Initialize()
Application.WindowState = xlMaximized
With Me
.Height = Application.Height
.Width = Application.Width
.BackColor = &H80000014
End With
End Sub
Klasse:
Code:
Option Explicit
Public WithEvents Knöpfe As MSForms.CommandButton
Private Sub Knöpfe_Click()
Knöpfe.BackColor = vbRed
Knöpfe.Font.Bold = True
Knöpfe.Caption = "Du hast gedrückt. Ich bin ganz rot geworden!"
Knöpfe.AutoSize = True
End Sub


Angehängte Dateien
.xls   Button dynamisch löschen.xls (Größe: 34,5 KB / Downloads: 4)
Antworten Top
#2
Kann einfacher:


Angehängte Dateien
.xls   0_Button dynamisch löschen.xls (Größe: 33 KB / Downloads: 2)
Antworten Top
#3
Hallo snb,

auch wenn ich deinen Code, deine Ideen zur Vereinfachung immer sehr zu schätzen weiß, darum geht es mir diesmal nicht.

Den visibel - Befehl kenne ich auch. Irgendwo bzw. überall im Netz schwirrt für das Löschen einer solchen

Schaltfläche Me.Control.Remove und dann natürlich ??? rum. Und übrigens Vereinfachung snb. Mit der Objektorientierung

kann man die Schaltfläche auch locker über Schleifen erzeugen. Anzahl, Lage, Steuerung. etc, aber das weiß jemand wie

du auch selbst. Ich bin jedenfalls begeistert davon und brauche jetzt genau dafür ein paar neue Befehle.

Aber danke für deine Mühe.
Antworten Top
#4
Code:
Sub Userform_besturingselement_delete()
  With ThisWorkbook.VBProject.VBComponents("invoer")
     .Designer.Controls.Remove "knop_einde"
  End With
End Sub


Sehe auch:

http://www.snb-vba.eu/VBA_Excel_VBproject_en.html#L121
Antworten Top
#5
Hallo Snb,

also ich bekomme mit der von dir vorgeschlagenen Lösung folgende Fehlermeldung:

Laufzeitfehler 1004
Der programmierte Zugriff auf das Visual Basic-Projekt ist nicht sicher.
Antworten Top
#6
ist nur eine Warnung:

Tue

Menüliste
File
Options
Trust Center
Macro Settings
Developer Macro Setting: einschalten.

evt. übersetzen in Deutsch.
Antworten Top
#7
Deine Einstellungsempfehlungen ergeben bei mir jetzt folgende (veränderte) Fehlermeldung:

Fehlermeldung 9
Index außerhalb des gültigen Bereichs
Antworten Top
#8
Hallo,
Private Sub LöscheButton_Click()
 Me.Controls.Remove "200"
End Sub
Gruß Uwe
Antworten Top
#9
Hallo Uwe,

danke für deine mehr als wertvolle Hilfe. Aber, wie das so ist im Leben, ich habe wieder ein neues Problem mit dem Code.
Ich habe meine Userform mal etwas weiterentwickelt und noch ein paar dynamisch erzeugte Schaltflächen draufgepackt.
Alle dynamischen Schaltflächen rufen in meiner Klasse die Prozedur Private Sub Knöpfe_Click auf (s. Code unten).
Mein Problem ist jetzt die einzelnen Schaltflächen sollen in dieser Prozedur unterschiedliche Ereignisse auslösen.
Dazu muss ich in dieser Prozedur Knöpfe_Click() unbedingt wissen, von welcher dynamischen Schaltfläche es aufgerufen
wurde. Wie lautet der Code anhand dessen ich diese Unterscheidung treffen kann? Der besseren Übersicht halber, habe ich
nochmal ein Attachment beigefügt. Ich hoffe ihr könnt mir helfen. Die Sache ist mir extrem wichtig. Danke.



Code:
Option Explicit
Public WithEvents Knöpfe As MSForms.CommandButton
Private Sub Knöpfe_Click()

'!!! Wichtig !!!
'Problem: Von welcher Schaltfläche stammt der Aufruf für diese Routine?
' Unterschiedliche Schaltflächen sollen unterschiedliche Aktionen in dieser Prozedur aufrufen

Knöpfe.BackColor = vbRed
Knöpfe.Font.Bold = True
Knöpfe.Caption = "Du hast mich gedrückt. Ich bin ganz rot geworden!"
Knöpfe.AutoSize = True
End Sub


Angehängte Dateien
.xls   Button in Klasse ermitteln.xls (Größe: 45 KB / Downloads: 2)
Antworten Top
#10
Hallo,

z.b. so:

Klassenmodul clsElemente
Option Explicit 
Public WithEvents Knöpfe As MSForms.CommandButton
Private Sub Knöpfe_Click()

'!!! Wichtig !!!
'Problem: Von welcher Schaltfläche stammt der Aufruf für diese Routine?
' Unterschiedliche Schaltflächen sollen unterschiedliche Aktionen in dieser Prozedur aufrufen
 Select Case UserForm1.ActiveControl.Name
   Case "101" To "150"
     Knöpfe.BackColor = vbGreen
     Knöpfe.Font.Bold = True
     Knöpfe.Caption = "Du hast mich gedrückt. Ich bin ganz grün geworden!"
     Knöpfe.AutoSize = True
   Case "151" To "200"
     Knöpfe.BackColor = vbRed
     Knöpfe.Font.Bold = True
     Knöpfe.Caption = "Du hast mich gedrückt. Ich bin ganz rot geworden!"
     Knöpfe.AutoSize = True
   Case "201" To "999"
     Knöpfe.BackColor = vbYellow
     Knöpfe.Font.Bold = True
     Knöpfe.Caption = "Du hast mich gedrückt. Ich bin ganz gelb geworden!"
     Knöpfe.AutoSize = True
 End Select
End Sub


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 14 - mit VBAHTML 12.6.0


Gruß Uwe
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste