Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: ---> Neu: Office 2010 Forum <-
Commandbutton zur Laufzeit erstellen
zurück: Mit Excel unbekannte Anzahl Zeilen auslesen und in Word expo weiter: Problem mit Variable Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Feedback Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Gast



Verfasst am:
12. Feb 2008, 19:55
Rufname:

Commandbutton zur Laufzeit erstellen - Commandbutton zur Laufzeit erstellen

Nach oben
       Version: Office 2003

Hallo Forum!

Meine VBA-Kenntnisse wachsen und wachsen, aber manchmal komme ich einfach nicht weiter. So auch diesmal...

Ich erstelle in einem Tabellenblatt Commandbuttons zur Laufzeit:

Code:

Sub CB_Create()
    With Tabelle1.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
                          Left:=Tabelle1.Cells(1, 1).Left + 6, _
                          Top:=Tabelle1.Cells(1, 1).Top + 2, _
                          Width:=30.75, _
                          Height:=18)
      .Name = "Button_CB1"
      .Object.Caption = "Test"
    End With
End Sub


Da dieser Code aufgerufen wird, wenn das Tabellenblatt aktiviert wird, also dieser Code:

Code:

Private Sub Worksheet_Activate()
Dim obj As Object, i As Boolean
    For Each obj In Tabelle1.OLEObjects
        If obj.Name <> "Button_CB1" Then
            i = False
        Else
            i = True
            Exit For
        End If
    Next
    If i = False Then CB_Create
    Buttons_Aktivieren
End Sub


Damit der Button etwas macht, habe ich ein Klassenmodul mit dem Namen "clsKontakt" definiert:

Code:

Option Explicit

Public WithEvents myKontakt As MSForms.CommandButton

Private Sub myKontakt_Click()
    msgbox "Mach was!"
End Sub


Natürlich muss noch definiert werden, wann das Klassenmodul angesprochen wird:

Code:

Option Explicit

Dim CollKont As Collection, i%

Sub Buttons_Aktivieren()
    Dim Kontakte As clsKontakt
   
    Set CollKont = New Collection
 
    For i = 1 To Tabelle1.OLEObjects.Count
        If Tabelle1.OLEObjects(i).Name = "Button_CB1" Then
            Set Kontakte = New clsKontakt
            Set Kontakte.myKontakt = Tabelle1.OLEObjects(i).Object
            CollKont.Add Kontakte
        End If
    Next
End Sub


Jetzt kommt das Kuriose:

Der Button wird beim ersten Durchlauf, also wenn das Tabellenblatt das erste Mal aktiviert wird, noch nicht über das Klassenmodul angesprochen. Man kann also auf den Button klicken, aber die Messagebox erscheint nicht.

Erst wenn man die Buttons_Aktivieren-Prozedur erneut aufruft, bekommt der Button das richtige Klick-Ereignis und die Messagebox poppt auf.

Hat jemand eine Erklärung, oder besser noch, eine Lösung dafür?

Vielen Dank, Spampunk
Bamberg
Excel/Access mit VBA


Verfasst am:
12. Feb 2008, 21:14
Rufname: Gerd

AW: Commandbutton zur Laufzeit erstellen - AW: Commandbutton zur Laufzeit erstellen

Nach oben
       Version: Office 2003

Hallo Spampunk,

manchmal ist Excel einfach schneller als man glaubt ... Razz

Das ActiveX-Steuerelement ist noch nicht fertig, wenn du versuchst es einer Klasse zuzuweisen. Mit einem kleinen Trick über die OnTime-Methode könnten wir Excel die nötige Zeit geben, das Element zu laden.

Private Sub Worksheet_Activate()
Dim obj As Object, i As Boolean
    For Each obj In Tabelle1.OLEObjects
        If obj.Name <> "Button_CB1" Then
            i = False
        Else
            i = True
            Exit For
        End If
    Next
    If i = False Then
        CB_Create
    Else
        Buttons_Aktivieren
    End If
End Sub


Sub CB_Create()
    With Tabelle1.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
                          Left:=Tabelle1.Cells(1, 1).Left + 6, _
                          Top:=Tabelle1.Cells(1, 1).Top + 2, _
                          Width:=30.75, _
                          Height:=18)
      .Name = "Button_CB1"
      .Object.Caption = "Test"
    End With
Application.OnTime Now + TimeValue("00:00:01"), "Buttons_Aktivieren"
End Sub
Konnte ich dir damit helfen ?

LG Gerd

_________________
NIPSILD = Nicht In Problemen, Sondern In Lösungen Denken
Spampunk
Excel mit VBA Advanced


Verfasst am:
13. Feb 2008, 22:35
Rufname:


AW: Commandbutton zur Laufzeit erstellen - AW: Commandbutton zur Laufzeit erstellen

Nach oben
       Version: Office 2003

Hallo Gerd,

vielen Dank für Deine Hilfe, genau das habe ich gesucht.

Funktioniert wunderbar!

Darüber hinaus war ich wohl nicht eingeloggt, sorry. Embarassed

LG, Timo

_________________
Ob Du nun sagst, Du schaffst es, oder ob Du nun sagst, Du schaffst es nicht - in beiden Fällen behältst Du Recht.

Henry Ford
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen




Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Excel VBA (Makros): Rechnungsnummer erstellen 6 Daethman 235 05. Jan 2010, 12:58
Daethman Rechnungsnummer erstellen
Keine neuen Beiträge Excel VBA (Makros): Diagramme mit Textfeld erstellen per Makro 2 C3PO 383 10. Okt 2009, 19:37
C3PO Diagramme mit Textfeld erstellen per Makro
Keine neuen Beiträge Excel VBA (Makros): Zeile und CommandButton gleichzeitig ausblenden 2 AnkeS 258 20. Aug 2009, 13:19
Gast Zeile und CommandButton gleichzeitig ausblenden
Keine neuen Beiträge Excel VBA (Makros): UserForm: Textbox1 in Sub für CommandButton einfügen 2 Domian 417 19. Aug 2009, 15:15
Domian UserForm: Textbox1 in Sub für CommandButton einfügen
Keine neuen Beiträge Excel VBA (Makros): Commandbutton Nr fortlaufend 13 kjot259 233 09. Mai 2009, 11:57
kjot259 Commandbutton Nr fortlaufend
Keine neuen Beiträge Excel VBA (Makros): Objektname aus String erstellen 2 Billii 373 01. Apr 2009, 11:50
Gast Objektname aus String erstellen
Keine neuen Beiträge Excel Auswertungen: Mehrere Pivot Tabellen mit Makro erstellen 3 AlPa 3240 16. März 2009, 09:20
Claudia Pardo Mehrere Pivot Tabellen mit Makro erstellen
Keine neuen Beiträge Excel VBA (Makros): CommandButton über makro ausführen nicht durch klick 15 pcfilzlaus 958 26. Feb 2009, 16:09
mumpel CommandButton über makro ausführen nicht durch klick
Keine neuen Beiträge Excel VBA (Makros): BackColor von CommandButton am Sheet ändern 2 MacG 935 11. Nov 2008, 20:50
Klausche BackColor von CommandButton am Sheet ändern
Keine neuen Beiträge Excel Hilfe: Dropdown Liste aus Externer Datenquelle erstellen!?! 2 Gast 1255 12. Aug 2008, 14:14
User99 Dropdown Liste aus Externer Datenquelle erstellen!?!
Keine neuen Beiträge Excel VBA (Makros): inhaltsverzeichnis erstellen 8 Gast Stefanie 1066 09. Jun 2008, 20:59
gast stefanie inhaltsverzeichnis erstellen
Keine neuen Beiträge Excel VBA (Makros): Laufzeit eines Makros abhängig von der Dateigröße? 6 Matthias12345 342 20. März 2008, 17:09
bernd200 Laufzeit eines Makros abhängig von der Dateigröße?
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Excel Diagramme