|
Commandbutton zur Laufzeit erstellen
|
| Autor |
Nachricht |
Gast
Verfasst am: 12. Feb 2008, 19:55 Rufname:
|
|
| 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
|
|
| Version: Office 2003 |
|
Hallo Spampunk,
manchmal ist Excel einfach schneller als man glaubt ...
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 SubKonnte 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:
|
| |
| 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.
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
|
|
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 |
 |
Excel VBA (Makros): Rechnungsnummer erstellen |
6 |
Daethman |
235 |
05. Jan 2010, 12:58 Daethman  |
 |
Excel VBA (Makros): Diagramme mit Textfeld erstellen per Makro |
2 |
C3PO |
383 |
10. Okt 2009, 19:37 C3PO  |
 |
Excel VBA (Makros): Zeile und CommandButton gleichzeitig ausblenden |
2 |
AnkeS |
258 |
20. Aug 2009, 13:19 Gast  |
 |
Excel VBA (Makros): UserForm: Textbox1 in Sub für CommandButton einfügen |
2 |
Domian |
417 |
19. Aug 2009, 15:15 Domian  |
 |
Excel VBA (Makros): Commandbutton Nr fortlaufend |
13 |
kjot259 |
233 |
09. Mai 2009, 11:57 kjot259  |
 |
Excel VBA (Makros): Objektname aus String erstellen |
2 |
Billii |
373 |
01. Apr 2009, 11:50 Gast  |
 |
Excel Auswertungen: Mehrere Pivot Tabellen mit Makro erstellen |
3 |
AlPa |
3240 |
16. März 2009, 09:20 Claudia Pardo  |
 |
Excel VBA (Makros): CommandButton über makro ausführen nicht durch klick |
15 |
pcfilzlaus |
958 |
26. Feb 2009, 16:09 mumpel  |
 |
Excel VBA (Makros): BackColor von CommandButton am Sheet ändern |
2 |
MacG |
935 |
11. Nov 2008, 20:50 Klausche  |
 |
Excel Hilfe: Dropdown Liste aus Externer Datenquelle erstellen!?! |
2 |
Gast |
1255 |
12. Aug 2008, 14:14 User99  |
 |
Excel VBA (Makros): inhaltsverzeichnis erstellen |
8 |
Gast Stefanie |
1066 |
09. Jun 2008, 20:59 gast stefanie  |
 |
Excel VBA (Makros): Laufzeit eines Makros abhängig von der Dateigröße? |
6 |
Matthias12345 |
342 |
20. März 2008, 17:09 bernd200  |
| |
|