Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen

Algo für true-false von CheckBoxen


Betrifft: Algo für true-false von CheckBoxen von: CO-Robert
Geschrieben am: 13.07.2018 09:14:30

Hallo zusammen,

ich baue immer noch an meinem Tool und die Optimierung klappt es einwandfrei, inkl. der Version mit der variablen Anzahl der Packstücke (habe ich in beiden Berechnung auf 25 max. begrenzt, wodurch die Laufzeit extrem gestiegen ist).

Nun eine weitere Frage an die Experten:
In meinem Tool soll nach der Optimierung eine Feinplanung stattfinden dergestalt, dass zunächst die optimierten Packstücke mit den dazugehörigen Aufträgen in die Planungsliste geschrieben wird. Dann soll - aus Gründen des Auftragssplitting (der Auftrag besteht aus mehreren Packstücken, die unterschiedlich verarbeitet werden sollen). Dazu habe ich unter der Bedingung der Buchung dieses Packstückes je Auftrag eine CheckBox eingebaut, die zu Beginn der Planung aktiviert werden soll, wenn das Packstück gebucht wurde.
Das funktioniert sehr gut per VBA aber ist bei der Anzahl der CheckBoxen mühseelig.
Hier mal der Code:

Private Sub Haken_setzen()
' Zeile 10

If Sheets("Anlegerplanung BEL TEST").Range("AC10") > 0 Then
    Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 18").ControlFormat.value = 1
   Else: Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 18").ControlFormat.value = 0
End If
If Sheets("Anlegerplanung BEL TEST").Range("AD10") > 0 Then
    Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 20").ControlFormat.value = 1
   Else: Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 20").ControlFormat.value = 0
End If
If Sheets("Anlegerplanung BEL TEST").Range("AE10") > 0 Then
    Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 21").ControlFormat.value = 1
   Else: Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 21").ControlFormat.value = 0
End If
If Sheets("Anlegerplanung BEL TEST").Range("AF10") > 0 Then
    Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 22").ControlFormat.value = 1
   Else: Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 22").ControlFormat.value = 0
End If
If Sheets("Anlegerplanung BEL TEST").Range("AG10") > 0 Then
    Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 23").ControlFormat.value = 1
   Else: Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 23").ControlFormat.value = 0
End If
If Sheets("Anlegerplanung BEL TEST").Range("AH10") > 0 Then
    Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 24").ControlFormat.value = 1
   Else: Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 24").ControlFormat.value = 0
End If

' Zeile 11

If Sheets("Anlegerplanung BEL TEST").Range("AC11") > 0 Then
    Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 11").ControlFormat.value = 1
   Else: Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 11").ControlFormat.value = 0
End If
If Sheets("Anlegerplanung BEL TEST").Range("AD11") > 0 Then
    Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 12").ControlFormat.value = 1
   Else: Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 12").ControlFormat.value = 0
End If
If Sheets("Anlegerplanung BEL TEST").Range("AE11") > 0 Then
    Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 13").ControlFormat.value = 1
   Else: Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 13").ControlFormat.value = 0
End If
If Sheets("Anlegerplanung BEL TEST").Range("AF11") > 0 Then
    Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 14").ControlFormat.value = 1
   Else: Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 14").ControlFormat.value = 0
End If
If Sheets("Anlegerplanung BEL TEST").Range("AG11") > 0 Then
    Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 15").ControlFormat.value = 1
   Else: Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 15").ControlFormat.value = 0
End If
If Sheets("Anlegerplanung BEL TEST").Range("AH11") > 0 Then
    Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 16").ControlFormat.value = 1
   Else: Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 16").ControlFormat.value = 0
End If

und so geht's weiter bis Zeile 41 ...

Kann man das mit einer IF-Then-Next oder while-do-Schleife abkürzen?

Danke für eure Bemühungen.

VG
Robert

  

Betrifft: AW: Algo für true-false von CheckBoxen von: Oberschlumpf
Geschrieben am: 13.07.2018 09:31:58

Hi Robert,

ist dir in der Zeile

Sheets("Anlegerplanung BEL TEST").Shapes("Check Box 18").ControlFormat.value = 1

bei "Check Box 18" ein Tippfehler passiert und die Box heißt eigtl "Check Box 19"?

Denn mir ist aufgefallen, dass ansonsten alle Checkboxes fortlaufende Nummern haben.
Sowohl für Zeile 10 als eben auch für Zeile 11.

Wenn das mit "Check Box 18" kein Tippfehler ist, kannst du die Checkbox dann in "Check Box 19" umbenennen, oder gibt es schon eine "Check Box 19", und du müsstest viel Code anpassen?

Ciao
Thorsten


  

Betrifft: AW: Algo für true-false von CheckBoxen von: CO-Robert
Geschrieben am: 13.07.2018 11:34:15

Hi Thorsten,

gut gesehen - aber es ist kein Fehler.
Hatte zwischendurch eine anderen Lösung probiert, woduch die Benamsung der CB nicht mehr chronologisch ist. Wenn CB 19 einmal gelöscht, dann heisst die nächste CB eben CB 20 ...

Dennoch Danke.

VG
robert


  

Betrifft: AW: Algo für true-false von CheckBoxen von: Daniel
Geschrieben am: 13.07.2018 09:36:43

Hi
ließe sich schon machen.
erfordert aber etwas aufwand.

- gehe alle deine Checkboxen durch und ersetze die Checkboxnummer durch die Adresse der Zelle, mit der die Checkbox vernüpft ist.
"Check Box 18" wird "Check Box AC10"
"Check Box 20" wird "Check Box AD10"

dann ließen sich alle Checkboxen mit folgender Schleife bearbeiten:

dim Zelle as range
With Sheets("Anlegerplanung BEL TEST")
    For each Zelle in .Range("AC10:AH41")
        .Shapes("Check Box " & .Address(0, 0)).ControlFormat.value = -(Zelle.Value > 0)
    next
End with
noch zur Erläuterung:
in VBA wird ein TRUE wie -1 und ein FALSE wie 0 gewertet.
Das erspart dir hier die IF-Abfrage, weil du das Vergleichsergebnis (TRUE/FALSe) in den gewünschten Wert (1 und 0) umrechenen kannst.

Gruß Daniel


  

Betrifft: AW: Algo für true-false von CheckBoxen von: CO-Robert
Geschrieben am: 13.07.2018 11:50:19

Hi Daniel,

Danke für den Tipp.

hm, versteh ich jetzt so, dass ich die Adressierung mit der Zelle vornehmen soll, in der die Bedingung steht die geprüft wird ob WAHR/FALSCH gesetzt werden soll - richtig?
Weil die Zellverknüpfung der CheckBox, in der der Wert WAHR oder FALSCH steht, ist ja eine andere ...

Als Beispiel: CheckBox 18 ist mit der Zelle N10 verknüpft (WAHR/FALSCH) und die Bedingung, ob WAHR/FALSCH steht in Zelle AC10 ...

Hm, habe gerade mal probiert - da ich mich für die Formular-Steuerelement CB entschieden habe klappt das wohl nicht mit der Umbenennung ...

VG
Robert


  

Betrifft: AW: Algo für true-false von CheckBoxen von: CO-Robert
Geschrieben am: 13.07.2018 11:53:47

Aaach ... man sollte RICHTIG probieren, bevor man etwas psotet ...

Umbenennung geht natürlich auch bei den Formular-CB'en, sollte man halt mit ENTER abschließen, dann klappts auch ... ;-)

Werde ich dann auch mal probieren ...

Danke nochmals.

VG
Robert