|
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): beim Erstellen neuer Datei den Code löschen |
7 |
Martin12345 |
102 |
19. Jun 2009, 17:06 Martin12345  |
 |
Excel Formate: Excel 2003 Dropdown Auswahlliste erstellen |
6 |
Cribbster |
9418 |
22. Apr 2009, 15:54 Gast  |
 |
Excel Hilfe: Verkaufsübersicht erstellen brauche eure Hilfe |
2 |
Luna123 |
101 |
07. Feb 2009, 08:36 ae  |
 |
Excel Auswertungen: Aus Auto Filter Stastik erstellen |
2 |
t Bone |
302 |
25. Jan 2009, 03:00 t Bone  |
 |
Excel VBA (Makros): MsgBox erstellen |
1 |
torsten118 |
1415 |
03. Jan 2009, 17:20 Zwickel  |
 |
Excel VBA (Makros): .txt Datei als Protokoll erstellen wenn ein Makrobutton..... |
2 |
freddy-krueger |
707 |
28. Dez 2008, 01:05 Gast  |
 |
Excel VBA (Makros): Hyperlinks automatisch erstellen |
8 |
Céline21 |
200 |
24. Nov 2008, 07:06 Céline21  |
 |
Excel VBA (Makros): Neue Position in Rechnungsformular erstellen (unten) |
2 |
pabu |
200 |
27. Aug 2008, 08:34 Gast  |
 |
Excel Hilfe: Muss ein CommandButton immer rechteckig sein? |
0 |
Luja |
302 |
19. Jun 2008, 14:07 Luja  |
 |
Excel Hilfe: Hilfe bei erstellen eines Excel Rechnungsmuster |
2 |
katerotto |
1820 |
28. Mai 2008, 12:14 katerotto  |
 |
Excel Formeln: Rangliste erstellen |
4 |
maxpower |
403 |
13. März 2008, 16:04 Zero  |
 |
Excel Auswertungen: Excel Diagramm erstellen mit Merkmalsausprägung über Jahre |
0 |
gutentag |
1716 |
17. Jan 2008, 16:08 gutentag  |
| |
|