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.
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.
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 SubDie 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
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
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
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
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.
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.
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.
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
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
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
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

