Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
644to648
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
644to648
644to648
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Globale Click-Ereignisse für Checkboxen?

Globale Click-Ereignisse für Checkboxen?
04.08.2005 13:40:11
Baldur
Hallo,
durch Makros erzeuge ich mir im Laufe der Bearbeitung diverse Checkboxen. Gibt es eine Möglichkeit, global ein einziges Clickereignis abzuhandeln und dieses den Checkboxen dann zuzuordnen (sprich, den einmal geschriebenen Code füralle Checkboxen zu verwenden)?
Jetzt schonmal danke.
LG Baldur

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Globale Click-Ereignisse für Checkboxen?
04.08.2005 13:44:16
Leo
"...erzeuge ich mir im Laufe der Bearbeitung diverse Checkboxen..."
Der Code dazu wäre hilfreich.
mfg Leo
AW: Globale Click-Ereignisse für Checkboxen?
04.08.2005 14:06:11
Baldur
Kein Problem:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim strRow As String
Dim strOLEName As String
Dim intRowIndex As Integer
Dim intColumnIndex As Integer
Dim intReturn As Integer
Dim OLEObj As OLEObject

'ES DREHT SICH UM SPALTE 6 BIS 16
If (Target.Cells.Count = 1 And _
(Target.Column = 6 Or Target.Column = 7 Or Target.Column = 8 Or _
Target.Column = 9 Or Target.Column = 10 Or Target.Column = 11 Or _
Target.Column = 12 Or Target.Column = 13 Or Target.Column = 14 Or _
Target.Column = 15 Or Target.Column = 16) And _
Target.Row > 8) Then

strRow = Target.Row
'Zählen, wie viele sinnvolle Zeilen man eingetragen hat. (VOR ZEILE 9 STEHEN FÜR DIESE ABFRAGE UNNÖTIGE INFORMATIONEN)
intRowIndex = 9
While ActiveSheet.Cells(intRowIndex, Target.Column) ""
intRowIndex = intRowIndex + 1
Wend 'While ActiveSheet.Cells(intRowIndex, 6) ""
intRowIndex = intRowIndex - 9

'ERZEUGEN DER CHECKBOX
If ActiveSheet.OLEObjects.Count "" Then
ActiveSheet.OLEObjects.Add ClassType:="Forms.CheckBox.1", Link:=False, _
displayasicon:=False, Left:=252, Top:=(Target.Row - 1) * 12.75 + 3.75, _
Width:=12, Height:=12
Set OLEObj = ActiveSheet.OLEObjects(ActiveSheet.OLEObjects.Count)
OLEObj.Name = "Checkbox" + strRow

EndIf
So, ich hoffe, das hilft erst mal weiter. Wenn nicht, dann einfach nochmal kurz Bescheid geben.
LG Baldur alias Eike
Anzeige
AW: Globale Click-Ereignisse für Checkboxen?
04.08.2005 14:14:38
Baldur
Erm.. ja, die Frage ist noch offen ;)
AW: Globale Click-Ereignisse für Checkboxen?
04.08.2005 14:15:12
Leo
Hi,
dazu ist ein Klassenmodul nötig. Schau mal in die recherche, Nepumuk hat dazu schon
mehrfach Lösungen geboten.
mfg Leo
Globale Ereignisse für Checkboxen? - Immer noch!!!
04.08.2005 15:35:25
Baldur
Also, ich habs immer noch nicht hingekriegt. Alles, was ich gefunden hab (übrigens nichts von nepumuk) war, dass man irgendwie die Objekte in einem Array speichern muss. Wozu?*verwirrt* Ich hab jetzt mal ein Klassenmodul erzeugt. Die Click-Routine wird aber noch nicht aufgerufen.
Mein Klassenmodul (names CB) sieht wie folgt aus:
>>>>>>>>>>>>>>>>>>>>>>
Option Explicit
Dim WithEvents CB as MSForms.CheckBox
Public

Sub CB_Click()
Unload Form1
Load Form1
End Sub

Anzeige
AW: Globale Ereignisse für Checkboxen? - Immer noch!!!
04.08.2005 16:01:43
Baldur
Hmm, das hilft mir leider immer noch nicht weiter. Ich weiß ja nicht, wie viele Checkboxen ich habe. Ich erzeuge sie dynamisch zur Laufzeit und setze sie direkt auf das Tabellenblatt. Oder kapier ichs nur einfach nicht?
Es kann also auch durchaus sein, dass ich mal irgendwann 50 oder 100 Checkboxen habe. Ist zwar unwahrscheinlich, aber immerhin möglich.
Ich suche also eine Möglichkeit, ein Clickereignis an einer beliebigen Checkbox abzufangen. Was muss ich tun, damit die Click-Routine dann auch aufgerufen wird? Muss ich da nach dem Erzeugen der Checkboxen noch eine Eigenschaft setzen? Wie kann ich die Checkboxen der neuen Klasse zuordnen?
Hier nochmal der Code, mit dem ich die Boxen erzeuge.
If ActiveSheet.OLEObjects.Count &lt intRowIndex And Target.Value &lt&gt "" Then
ActiveSheet.OLEObjects.Add ClassType:="Forms.CheckBox.1", Link:=False, _
displayasicon:=False, Left:=252, Top:=(Target.Row - 1) * 12.75 + 3.75, _
Width:=12, Height:=12
Set OLEObj = ActiveSheet.OLEObjects(ActiveSheet.OLEObjects.Count)
OLEObj.Name = "Checkbox" + strRow

EndIf
Anzeige
AW: Globale Ereignisse für Checkboxen? - Immer noch!!!
04.08.2005 15:44:00
Leo
Hi,
aus dem Archiv von K.Rola:
''In einem Standardmodul
Option Explicit
Public cCheck() As New clsControls
Public CheckCount As Integer
''--------------------------------------------------------------------
Sub setten()
Dim j As Integer
CheckCount = 0
For j = 1 To Sheets(1).OLEObjects.Count
If Sheets(1).OLEObjects(j).ProgId Like "Forms.Check*" Then
CheckCount = CheckCount + 1
ReDim Preserve cCheck(1 To CheckCount)
Set cCheck(CheckCount).CheckBox = Sheets(1).OLEObjects(j).Object
End If
Next
End Sub
''-------------------------------------------------------------------
''In ein Klassenmodul, das zwingend den Namen clsControls
''haben muss!!!
''--------------------------------------------------------------
Option Explicit
Public WithEvents CheckBox As msforms.CheckBox

Private Sub CheckBox_Click()
If CheckBox Then
CheckBox.TopLeftCell.Interior.ColorIndex = 3
Else
CheckBox.TopLeftCell.Interior.ColorIndex = xlNone
End If
End Sub

Die Anpassung bekommst du sicher hin.
mfg Leo
Anzeige
Das sollte weiterhelfen - danke!
04.08.2005 16:12:52
Baldur
Ok, das sollte mir mal weiterhelfen. Sollte noch was sein, dann melde ich mich nochmal ;)
Vielen Dank erstmal!
Gruß Baldur
Typen unverträglich!?
05.08.2005 09:46:09
Baldur
So, ich habe das jetzt mal an meinen Code angepasst. Jetzt tritt folgender Effekt auf: Die Checkbox wird zwar noch erzeugt, aber danach kommt die Meldung "Typen unverträglich". Die Checkbox wird nicht umbenannt, also muss es was mit der Eigenschaft Name zu tun haben.
If ActiveSheet.OLEObjects.Count &lt intRowIndex And Target.Value &lt&gt "" Then
ActiveSheet.OLEObjects.Add ClassType:="Forms.CheckBox.1", Link:=False, _
displayasicon:=False, Left:=252, Top:=(Target.Row - 1) * 12.75 + 3.75, _
Width:=12, Height:=12
'HIER TRITT WOHL DER FEHLER AUF
ActiveSheet.OLEObjects(ActiveSheet.OLEObjects.Count).Name = "Checkbox" + strRow
'Zählen, wie viele Checkboxen es gibt
intOLEIndex = 0
For intLoopIndex = 1 To ActiveSheet.OLEObjects.Count
If ActiveSheet.OLEObjects(intLoopIndex).progID Like "Forms.Check*" Then
intOLEIndex = intOLEIndex + 1
Set cCheck(intOLEIndex).CheckBox = ActiveSheet.OLEObjects(intLoopIndex)
End If
Next intLoopIndex
EndIf
Achja, ist es normal, dass man Codestellen, an denen man mit OLE-Objekten arbeitet, nicht schrittweise im Debug-Modus durchlaufen kann? Woran liegt das?
LG Baldur
Anzeige
AW: Typen unverträglich!?
05.08.2005 13:22:31
Baldur
Ich muss mich korrigieren: Der Fehler tritt nicht beim Umbenennen der Checkbox auf, das funktioniert. Der Fehler tritt vielmehr beim Zugriff auf cCheck auf.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige