Moin Jörg,
Post by Jörg EisenträgerPost by Reiner WolffDas liegt vermutlich daran, dass Du dem Klassenmodul nicht den Namen
'clsVieleOptionen' gegeben hast. Gehe einmal in das Klassenmodul und stelle
in den Eigenschaften den Namen darauf ein, dann sollte es eigentlich gehen.
Post by Jörg Eisenträger(Fehlt wohl irgendwas 'ne Klasse höher?)
Bei mir gab es noch kein Klassenmodul.
Daran hast Du nun ja etwas geändert. ;-)
Post by Jörg EisenträgerPost by Reiner WolffDenn Code, den Du gar nicht verstanden
hast, solltest Du nicht einsetzen. Solltest Du also mit Klassen nachher
arbeiten wollen, so freue ich mich schon auf Deine Verständnisfragen zu
diesem Code :)
Wie auch immer, bis jetzt tut's halt net und ich bin keinen Schritt
weiter. Ich arbeite auch gern ohne Klassenmodule und hab auch keinen
Stress, Code zur Laufzeit zu erzeugen oder zu importieren, solange es
funktioniert. Ich würde am liebsten Melanies ersten Code nehmen (denn
den verstehe ich), wenn denn der VBA-Editor nicht aufklappen würde.
Tja, bei der Lösung kann ich Dir nicht wirklich gut weiterhelfen, da ich
mit sowas selbst noch nicht viel gearbeitet habe.
Post by Jörg EisenträgerIhr habt in dem Thread so viele einzelne Code-Schnipsel gepostet, so
dass ich nicht weiß, wo die alle hinsollen.
Gut, Ok. Ich habe ganz unten die Code-Fragmente noch einmal zusammengefügt,
damit Du es etwas leichter hast.
Post by Jörg EisenträgerNachdem ich ein Klassenmodul 'clsVieleOptionen' mit dem Code ...
[schnippel]
Post by Jörg Eisenträger... angelegt hatte, konnte ich zumindest kompilieren und es wurde auch
ein neuer OptionButton erzeugt. Beim ersten Klick darauf kam auch die
MessageBox, ...
Wunderbar, es tut doch. *Einen* Schritt hätten wir damit doch geschafft ;-)
Post by Jörg Eisenträger...bei weiteren Klicks jedoch nicht mehr. Warum???
Das liegt in der Natur eines OptionButtons. Bei diesem Steuerelement wird
das Click-Ereignis nicht ausgelöst, wenn er bereits angewählt ist (finde
ich zwar nicht sonderlich sinnvoll, aber ist so).
D.h. wenn Du mehrere OptionButtons hättest und immer zwischen diesen hin-
und herschaltest, dann sollte auch jedesmal die MessageBox angezeigt
werden.
Wenn Du jedesmal auf einen Mausklick reagieren willst, ist für Dich das
MouseDown-Ereignis vielleicht besser geeignet, um auf einen Mausklick zu
reagieren. Ich habe dafür das Ereignis - allerdings ohne auszuführenden
Code - schonmal in das Klassenmodul unten mit gepostet.
Post by Jörg EisenträgerIch bin kurz davor aufzugeben. Dann wird der Wunsch eines Users, per
Klick auf einen der kopierten Buttons einem ZellRange eine bestimmte
Formatierung zuzuweisen, eben unerfüllt bleiben.
Da kann ich Dich zwar gut verstehen.
Aber nur Mut, Dein Code funktioniert doch schon fast.
Bitte, gern geschehen. Mir hat der Thread eh auch so Spass gemacht. Ob Du
daraus nun Code umsetzt oder nicht, bleibt ja Dir überlassen :-)
Greetinx aus Kiel
Reiner
P.S.: Hier nun der Code
'in ein Klassenmodul mit dem Namen 'clsVieleOptionen' schreibst
'Du folgenden Code:
'>>>>
Option Explicit
Public WithEvents opt As MSForms.OptionButton
Private Sub opt_Click()
MsgBox "Hallo " & opt.Caption
End Sub
Private Sub Class_Terminate()
Set opt = Nothing
End Sub
Private Sub opt_MouseDown(ByVal Button As Integer, ByVal Shift As Integer,
ByVal X As Single, ByVal Y As Single)
'Vielleicht passt Dein Code besser in dieses Ereignis?
End Sub
'<<<<
'Der Aufruf kann dann im Codemodul des Tabellenblattes zB so aussehen:
'>>>>
Option Explicit
Dim colOptionen As Collection
Sub Aufruf()
Hinzufügen
'Timer hinzufügen, um die Makrozuweisung unabhängig vom Hinzufügen
'zu machen (Lösungen: nicht schön aber selten)
Application.OnTime Now + CDate("00:00:01"), "Tabelle1.Zuweisung"
End Sub
Sub Hinzufügen()
Set colOptionen = New Collection
With ActiveSheet
.Shapes("VorlageOptionButton").Copy
.Paste
With Selection
.Top = Range("ZielZelle").Top
.Left = Range("ZielZelle").Left
.Name = "BtnTest"
End With
ActiveCell.Select
End With
End Sub
Public Sub Zuweisung()
Dim Hilfsvariable As clsVieleOptionen
Dim objCtrl As OLEObject
Dim objOptionButton As MSForms.OptionButton
Set colOptionen = New Collection
With ActiveSheet
For Each objCtrl In .OLEObjects
If objCtrl.ProgId = "Forms.OptionButton.1" Then
Set objOptionButton = objCtrl.Object
Set Hilfsvariable = New clsVieleOptionen
Set Hilfsvariable.opt = objCtrl.Object
colOptionen.Add Hilfsvariable
End If
Next objCtrl
End With
End Sub
'<<<<
--
Wenn irgendwas mit deinem Computer nicht stimmt, sag deiner Sekretärin,
dass sie die EDV-Abteilung anrufen soll. Wir lieben das Spielchen,
mit einer dritten Person ein Problem zu klären,
von dem Sie absolut überhaupt nichts weiss.