Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Kontrollkästchen ausgrauen bzw. sperren





Frage

Hallo zusammen, ich habe auf einem Tabellenblatt verschiedene Tätigkeiten, die über Kontrollkästchen optional gewählt werden können. Bisher kann man jedes Kontrollkästchen auswählen. Ich möchte jetzt eine Zusatzfuktion hinzufügen. Die Tätigkeiten, die der User auswählen kann, sollen durch drei weitere Steuerelemente, die die Abteilungen repräsentieren bestimmt werden. Also: Beispiel - Liste der Tätigkeiten 50 Einträge lang (alle mit kontrollkäschen versehen). Gibt der User an das er der Abteilung a angehört sollen z.B. diejenigen Tätigkeiten, die in seiner Abt. nicht ausgeführt werden ausgegraut werden. Ich freue mich über jeden Vorschlag und hoffe das die Beschreibung ausreichend ist. Grüße Björn

Antwort 1 von coros

Hi Björn,

hier ein Lösungsvorschlag von mir. Der Code gehört in das VBA-Projekt Deiner Tabelle.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("A1") = "a" Then CheckBox1.Enabled = True
If Range("A1") <> "a" Then CheckBox1.Enabled = False
End Sub


Die Funktion: Wenn in Zelle A1 ein A steht, dann wird die CheckBox freigegeben. Steht in Zelle A1 etwas anderes, wird die CheckBox gesperrt. Ich hoffe, als Ansatz hilft Dir das schon mal weiter.

Solltest Du Probleme haben mit dem Code, melde Dich moch mal.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von Björn

Wie immer nen guter Tip. Danke coros - ich werds gleich ausprobieren.
Grüße Björn

Antwort 3 von Björn

Hi cronos! (oder auch alle anderen)

Gibt es eine Möglichkeit per Schleife durch meine Kontrollkästchen zu gehen und z.b. value checks zu machen oder sie zu enablen? Habe ziemlich viele Kontrollkästchen und irgendwann wird mann rammdösig - außerdem sieht es ziemlich blöd aus zig mal die selbe Anweisung zu haben. Meine checkboxen heißen CheckBox1 bis CheckBox170. Kann man den numerischen Teil des namens durch ne Variable repräsentieren?

Grüße Björn

Antwort 4 von nighty

hi bjoern :)

der code der checkbox ist bindend ,du koenntest alternativ es so gestalten :)

gruss nighty

Sub makro01()
If CheckBox1.Value = True Then
MakroName
rem alternativ call makroname parameter
Else
MakroName
rem alternativ call makroname parameter
End If
End Sub

Antwort 5 von Björn

Vielen Dank nighty. Ich werd dann noch nen bisschen rumbasteln. Toll übrigends, daß man hier immer so fix Antworten bekommt!

Grüße Björn

Antwort 6 von coros

Hi Björn,

du wirst schon ein wenig Arbeit investieren müssen. Denn woher soll ein Makro wissen, bei welcher Eingabe es was machen soll, wenn diese Bedingungen nirgends in dem Makro stehen.

Man könnte das folgendermaßen Lösen: Die nachfolgende Anweisung reagiert auf Einträge in Zelle A1. Wird dort ein a eingetragen, werden CheckBox 1,3 und 5 aktiviert, bei B sind es 2,4 und 6 und bei C werden CheckBox 1,2 und 3 aktiviert. Steht in Zelle keines der drei Buchstaben, werden alle deaktiviert.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Cells.Count > 1 Then Exit Sub
  Select Case Range("A1").Value
    Case "a"
CheckBox1.Enabled = True
CheckBox3.Enabled = True
CheckBox5.Enabled = True
    Case "b"
CheckBox2.Enabled = True
CheckBox4.Enabled = True
CheckBox6.Enabled = True
    Case "c"
CheckBox1.Enabled = True
CheckBox2.Enabled = True
CheckBox3.Enabled = True
Case Else
CheckBox1.Enabled = False
CheckBox3.Enabled = False
CheckBox5.Enabled = False
CheckBox2.Enabled = False
CheckBox4.Enabled = False
CheckBox6.Enabled = False
End Select
End Sub


Damit jedesmal, wenn die Datei durch einen Mitarbeiter geöffnet wird und der gezwungen werden sollte, einen Eintrag in Zelle A1 vorzunehmen, sollte der folgende Code noch in das VBA-Projekt "Diese Arbeitsmappe" kopiert werden.

Private Sub Workbook_Open()
Application.ScreenUpdating = False
Range("A1").Delete
End Sub


Diese Anweisung macht nichts anderes als dass der Inhalt der Zelle A1 gelöscht wird.

Ich hoffe, Du kannst mit den Anweisungen etwas anfangen. Bei Fragen, meldest Du Dich wieder.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 7 von Björn

Hallo coros!

Danke erstmal. die arbeit habe ich schon, wenn auch etwas anders, investiert. ich hatte halt nur gehofft, daß bei über 150 Checkboxen ein anderer Weg möglich sei bei dem ich evtl. die Boxen per schleife durchlaufe. Ich hab ja mittlerweile herausgefunden, daß ich den numerischen Teil des Namens nicht repräsentieren kann - also muß es wohl so gehen.

Grüße an dich und nighty ... Björn

Antwort 8 von nighty

hi bjoern :)

hier eine andere vielleicht fuer dich brauchbarere variante :)

alle checkboxen muessen so aussehen

Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
festhalt(1) = 1
Else
festhalt(1) = 0
End If
End Sub

festhalt(10) ist eine globale var die bei checkbox true festhalt(1) auf 1 setzt anderenfalss auf 0

die 10 von festhalt ist der maxindex der anzahl checkboxen,moechtest du 150 haben ist die 10 durch 150 zu ersetzen

in jeder checkbox ist der index der gleiche wie die nummer der checkbox

dieses nun in einem allgemeinen modul einfuegen,somit in einer schleife jetzt die checkboxen abfragbar sind anhand der globalen var

gruss nighty

Public festhalt(10) As Integer
Sub makro01()
REM hier 10 gegebenenfalls aendern
REM schleife der abfrage
For t1 = 1 To 10
If festhalt(t1) = 1 Then
Cells(t1, 1) = "" & t1 & "checkbox gesetzt"
Else
Cells(t1, 1) = "" & t1 & "checkbox nicht gesetzt"
End If
Next t1
End Sub



Antwort 9 von nighty

hi bjoern :)

checkbox2 wuerde dann so aussehen muessen

Private Sub CheckBox2_Click()
If CheckBox2.Value = True Then
festhalt(2) = 1
Else
festhalt(2) = 0
End If
End Sub

gruss nighty