|
Commandbutton zur Laufzeit erstellen
|
| Autor |
Nachricht |
Gast
Verfasst am: 12. Feb 2008, 20: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, 22: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, 23: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 Hilfe: XML aus XLS erstellen und für InDesign Serienbrief verwenden |
1 |
elchupacabre |
133 |
30. Aug 2010, 20:19 Susi67  |
 |
Excel VBA (Makros): Commandbutton dynamisch Bild zuweisen |
3 |
Thomas_D2407 |
531 |
30. Jan 2010, 14:34 Thomas_D2407  |
 |
Excel Hilfe: Kassenbuch mit Excel erstellen |
5 |
Dan598 |
1057 |
04. Jan 2010, 18:23 Dan598  |
 |
Excel Formeln: Angebot mit variablen Nummern in Excel erstellen??? Formel? |
4 |
Bennla |
105 |
30. Okt 2009, 11:58 Bennla  |
 |
Excel Formeln: Dateipfad erstellen aus Zellen |
7 |
kai.brandau |
410 |
26. Okt 2009, 17:07 neopa  |
 |
Excel VBA (Makros): Excel Tool zum erstellen einer Top 100 Liste Produkten |
2 |
Schweini31 |
512 |
31. Jul 2009, 19:11 Gast  |
 |
Excel VBA (Makros): Makro erstellen für zu viele Wenn Funktion |
4 |
Gast12345 |
111 |
14. Jul 2009, 15:56 Gast  |
 |
Excel VBA (Makros): Excel 2007 - Programm erstellen, das automatisch eine E-Mail |
4 |
Gast |
421 |
24. Mai 2009, 16:01 Klaus aus M  |
 |
Excel Auswertungen: Diagramm auf extra Tabellenseite erstellen |
3 |
Stefanger |
322 |
20. März 2009, 23:21 Timmee  |
 |
Excel VBA (Makros): Einzelne Textdateien mit Excel erstellen |
1 |
razzefazze |
1131 |
22. Aug 2008, 13:06 ransi  |
 |
Excel VBA (Makros): wieder mal: pdf erstellen..... |
14 |
Luja |
2877 |
16. Jul 2008, 13:05 Luja  |
 |
Excel Hilfe: Menükarte mit Exel erstellen |
6 |
Elb |
2542 |
02. März 2008, 17:56 Robbi Dick  |
| |
|