Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1008to1012
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
Inhaltsverzeichnis

Checkboxen

Checkboxen
17.09.2008 12:56:00
Gordon
Moin,
ich habe auf einem Blatt 39 Checkboxen (CheckBox1 bis Checkbox40).
Der Code für Checkbox2 schaut so aus:

Private Sub CheckBox1_Click()
With Worksheets("Neu")
If CheckBox2.Value = True Then
.Columns("I:K").ColumnWidth = 10.14
.Columns("L").ColumnWidth = 1.71
ElseIf CheckBox2.Value = False Then
.Columns("I:L").ColumnWidth = 0
End If
End With
End Sub


Für CheckBox3 würde der Code so aussehen:


Private Sub CheckBox1_Click()
With Worksheets("Neu")
If CheckBox3.Value = True Then
.Columns("M:O").ColumnWidth = 10.14
.Columns("P").ColumnWidth = 1.71
ElseIf CheckBox3.Value = False Then
.Columns("M:P").ColumnWidth = 0
End If
End With
End Sub


Heißt also bei jeder weiteren Checkbox werden die die nächsten 4 Spaltenbreiten geändert. Ich könnte also dieses Codebeispiel 39mal hinkopieren, die Buchstaben der Spalten austauschen und es würde gehen.
Aber mich würde interessieren, ob man es nicht einfacher haben könnte bzw. einen Code mit Variablen für alle 39Checkboxen. Gibt es dort 'ne Möglichkeit?
Gruß
Gordon

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

Betreff
Datum
Anwender
Anzeige
AW: Checkboxen
17.09.2008 13:13:25
Rudi
Hallo,

CheckBox1 bis Checkbox40


das sind aber 40.


Der Code für Checkbox2 schaut so aus:
Private Sub CheckBox1_Click()


das muss schon Checkbox2_Click heißen.
Prinzipiell kannst du das über eine eigene Klasse machen. Bei deinem Level aber nicht zu empfehlen.
Mein Vorschlag:


Sub test(i As Integer, bln As Boolean)
With Worksheets("Neu")
.Range(.Columns(i), .Columns(i + 2)).ColumnWidth = 10.14 * -bln
.Columns(i + 3).ColumnWidth = 1.71 * -bln
End With
End Sub
Private Sub CheckBox2_Click()
Call test(9, checkbox2.Value)
End Sub


Gruß
Rudi

Anzeige
AW: Checkboxen
17.09.2008 13:37:12
Gordon
Ok,
danke für die Hilfe.
Gruß
Gordon
AW: Checkboxen
17.09.2008 14:36:58
Peter
Servus,
wenn ich die Logik richtig verstanden habe, müsste es so auch gehen.

'Code in das Klassenmodul auf dem sich die Checkboxen befinden
Private Sub Check_Schleife()
Dim objCheck As OLEObject
Dim iNummer As Integer
Dim rngStart As Range, rngCol As Range
Dim sSpalten(2) As String
Set rngStart = Range("I:L") 'Anpassen bei anderen Startspalten
For Each objCheck In ActiveSheet.OLEObjects
If InStr(1, objCheck.Name, "CheckBox") > 0 Then
iNummer = --Right(objCheck.Name, Len(objCheck.Name) - Len("CheckBox"))
If iNummer  1 Then
Set rngCol = Range(rngStart.Offset(0, (iNummer - 1) * 4).Address)
Else
Set rngCol = rngStart
End If
End If
If objCheck.Object.Value Then
sSpalten(0) = Left(rngCol.Address(0, 0), InStr(1, rngCol.Address(0, 0), ":") - 1)
sSpalten(1) = Right(rngCol.Address(0, 0), Len(rngCol.Address(0, 0)) - (1 + Len( _
sSpalten(0))))
sSpalten(2) = Left(Range(sSpalten(0) & ":" & sSpalten(0)).Offset(0, 2).Address(0, 0) _
, InStr(1, _
Range(sSpalten(0) & ":" & sSpalten(0)).Offset(0, 2).Address(0, 0), " _
:") - 1)
Range(sSpalten(0) & ":" & sSpalten(2)).ColumnWidth = 10.14
Range(sSpalten(1) & ":" & sSpalten(1)).ColumnWidth = 1.71
Else
rngCol.ColumnWidth = 0
End If
Next
End Sub


MfG
Peter

Anzeige
AW: Checkboxen
17.09.2008 15:24:00
Gordon
Moin,
da ich noch nie mit einem Klassenmodul gearbeitet habe blicke ich natürlich kaum durch. ich weiß zwar wie ich ein Klassenmodul im Editor erzeuge, aber es wenn ich da den Code reinpacke passiert erstmal gar nichts, wenn ich eine meiner Checkboxen betätige.
Gruß
Gordon
AW: Checkboxen
17.09.2008 15:29:42
Peter
Servus,
Klassenmodul meint hier, die Tabelle in der sich deine CheckBoxen befinden (z.B. Tabelle1)
MfG
Peter
AW: Checkboxen
17.09.2008 15:34:44
Gordon
Achso,
naja...das hatte ich auch schon ausprobiert, aber da ist dann gar nichts passiert, als ich die Checkboxen betätigt habe.
Gruß
Gordon
AW: Checkboxen
17.09.2008 15:39:00
Peter
Servus,
sry dann habe ich das falsch verstanden.
Dann müsste man wirklich ein Klassenmodul schreiben.
Der Code von mir funktioniert nur auf manuellem Starten des selbigen, allerdings für alle Checkboxen
nur einmal.
Sry nochmals.
MfG Peter
Anzeige
AW: Checkboxen
17.09.2008 15:46:00
Gordon
Keine Ursache,
die anderen Beiträge haben mir bisher ja auch schon gut weitergeholfen. :)
Ich habe zu danken! :-)
Gruß
Gordon
AW: Checkboxen
17.09.2008 16:33:00
Rudi
Hallo,
1. ein Klassenmodul anlegen. Name: clsCBX
Code:

Option Explicit
Public WithEvents myCBX As MSForms.CheckBox
Private Sub myCBX_click()
Dim i As Integer
Application.ScreenUpdating = False
i = Replace(myCBX.Name, "CheckBox", "") * 1
Range(Columns(i * 4 + 1), Columns(i * 4 + 3)).ColumnWidth = CW1 * -myCBX.Value
Columns(i * 4 + 4).ColumnWidth = CW2 * -myCBX.Value
Application.ScreenUpdating = True
End Sub


In ein Modul:


Option Explicit
Public oCBX(1 To 40) As New clsCBX
Public Const CW1 As Single = 10.14
Public Const CW2 As Single = 1.71
Sub prcKlasse()
Dim i As Integer, test
Application.ScreenUpdating = False
For i = 1 To 40
Set oCBX(i).myCBX = Sheets(1).Shapes("CheckBox" & i).OLEFormat.Object.Object
oCBX(i).myCBX.Caption = i
Range(Columns(i * 4 + 1), Columns(i * 4 + 3)).ColumnWidth = CW1 * -oCBX(i).myCBX.Value
Columns(i * 4 + 4).ColumnWidth = CW2 * -oCBX(i).myCBX.Value
Next
Application.ScreenUpdating = True
End Sub


In DieseArbeitsmappe:


Option Explicit
Private Sub Workbook_Open()
prcKlasse
End Sub


Gruß
Rudi

Anzeige
AW: Checkboxen
17.09.2008 16:47:00
Gordon
Danke,
aber wie kann ich denn ein Klassenmodul umbenennen? Kann es leider nur einfügen im Editor.
Gruß
Gordon
AW: Checkboxen
17.09.2008 17:13:00
Rudi
Hallo,
das Eigenschaftenfenster einblenden (F4) und (Name) ändern.
Gruß
Rudi

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige