Hallo,
Ich arbeite zur Zeit an einem Interface. Dieses ist aus einer Datenstruktur aufgebaut, welche ich vorgebe. Ich arbeite schon länger an dieser Aufgabe und habe zur Zeit meine bedenken, ob ich die Aufgabe mit den richtigen programmiertechnischen Strukturen löse.
Das Projekt ist meinem Vorgsetzten nicht transparent genug und scheint unnötigen Code (zb Schleifen) zu beinhalten. Ich stimme ihm teils auch zu, jedoch weiß ich (noch) keine bessere Methode/ vorgehensweise, die Grundstruktur zu überarbeiten.
Ich versuche einfach mal mein Projekt anhand Ausschnitten aus meinem Code zu erklären.
Zum Projekt:
Ich habe zuerst ein Tabellenblatt, welches diverse Daten darstellt. Diese Daten sind Menüs in einer Software, die überprüft werden sollen. (Im Prinzip das Grundkonzept der Aufgabe). Diese Daten werden übertragen in ein zweites Tabellenblatt. Dieses ist dann für den Anwender. Ich übertrage die Daten mit einer wenn-dann Formel, um alle Daten Variabel anpassbar zu machen. Das heißt, mein zweites Tabellenblatt soll immer nur die Daten ausgeben, die auch überprüft werden sollen. Ich verbinde diesen Code mit einer indirekten Datenüberprüfung. Es gibt also eine Tabelle die hat A, B und C. A, B und C haben jeweils noch x Untermenüs. Jetzt möchte ich in meinem Interface(zweites Tabellenblatt) nur B anzeigen. Über die indirekte Datenüberprüfung und ein bisschen wenn-dann läuft dieses auch fließend.
Die Probleme liegen eher in den Makros. Es sind die variablen Abhängigkeiten nenne ich es jetzt einfach mal :D.. Jede Zelle, die aus den Daten hervorkommen und immer unterschiedlich sein kann, hat eine Checkbox, die einen Triplestate hat und die Überprüfung iniziiert. False und Blau für muss überprüft werden, Null und Grün für erfolgreich überprüft und True und Rot für Fehler gefunden.
Hier einfach mal zwei Funktionen die ich anwende.. die erste ist dafür da, die Checkboxen, die ich vorher initialisieren, anzupassen.
' ------- Anwenderänderungen der Checkboxen festlegen (Farben und/mit Triplestate)----------------------------
Sub CheckboxChange()
For iCheckboxChange = 0 To CheckBoxGrenzeSpalte
If Range("E" & iCheckboxChange + StartZelle) = "-" Then
nofunc = False
End If
If ActiveSheet.OLEObjects("CheckBox" & iCheckboxChange).Object.value = True Then
If Not ActiveSheet.OLEObjects("CheckBox" & iCheckboxChange).Object.BackColor = DARKRED Then 'Farbe Fehler eingetragen
ActiveSheet.OLEObjects("CheckBox" & iCheckboxChange).Object.BackColor = RED ' Farbe Fehler NICHT eingetragen
End If
ElseIf ActiveSheet.OLEObjects("CheckBox" & iCheckboxChange).Object.value = False Then
ActiveSheet.OLEObjects("CheckBox" & iCheckboxChange).Object.BackColor = BLUE ' Blaue Farbe
Else
ActiveSheet.OLEObjects("CheckBox" & iCheckboxChange).Object.BackColor = GREEN ' Grün
End If
If ActiveSheet.OLEObjects("CheckBox" & iCheckboxChange + CheckBoxStartSPALTE_G).Object.value = True Then
If Not ActiveSheet.OLEObjects("CheckBox" & iCheckboxChange + CheckBoxStartSPALTE_G).Object.BackColor = DARKRED Then
ActiveSheet.OLEObjects("CheckBox" & iCheckboxChange + CheckBoxStartSPALTE_G).Object.BackColor = RED
End If
ElseIf ActiveSheet.OLEObjects("CheckBox" & iCheckboxChange + CheckBoxStartSPALTE_G).Object.value = False Then
ActiveSheet.OLEObjects("CheckBox" & iCheckboxChange + CheckBoxStartSPALTE_G).Object.BackColor = BLUE
Else
ActiveSheet.OLEObjects("CheckBox" & iCheckboxChange + CheckBoxStartSPALTE_G).Object.BackColor = GREEN
' hier fehlt noch falls das naechste untermenü nicht ausgefüllt wurd die Fehlermeldung!!! siehe Funktion checkboxpropsallu1
End If
Next iCheckboxChange
End Sub
oder auch die zweite, die dafür sorgt, dass wenn andere Daten genommen werden, die Checkboxen wieder auf den Default-wert zurück gesetzt werden..
' ------ Diverse Default Einstellungen jedes mal wenn im Worksheet Änderungen vorgenommen werden---------------------------------------
Sub CheckboxPropertiesDefault()
'
' Alle Checkboxen false und null, falls die Zelle "-" ist
' null, damit diese Zellen nicht verhindern, dass die HauptCheckbox GREEN sein kann
For iCheckboxPropertiesDefault = 0 To CheckBoxGrenzeSpalte
' In Spalte C
If Range(SSPALTE_C & iCheckboxPropertiesDefault + StartZelle) = "-" Then
nofunc = False
Range(SSPALTE_C & iCheckboxPropertiesDefault + StartZelle).Interior.ColorIndex = 0
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault + CheckBoxStartSPALTE_C).Object.value = Null
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault + CheckBoxStartSPALTE_C).Object.Enabled = False
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault + CheckBoxStartSPALTE_C).Visible = False
Else
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault + CheckBoxStartSPALTE_C).Object.Enabled = True
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault + CheckBoxStartSPALTE_C).Visible = True
End If
'In Spalte E
If Range(SSPALTE_E & iCheckboxPropertiesDefault + StartZelle) = "-" Then
nofunc = False
Range(SSPALTE_E & iCheckboxPropertiesDefault + StartZelle).Interior.ColorIndex = 0
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault).Object.value = Null
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault).Object.Enabled = False
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault).Visible = False
Else
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault).Object.Enabled = True
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault).Visible = True
End If
'In Spalte G
If Range(SSPALTE_G & iCheckboxPropertiesDefault + StartZelle) = "-" Then
nofunc = False
Range(SSPALTE_G & iCheckboxPropertiesDefault + StartZelle).Interior.ColorIndex = 0
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault + CheckBoxStartSPALTE_G).Object.value = Null
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault + CheckBoxStartSPALTE_G).Object.Enabled = False
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault + CheckBoxStartSPALTE_G).Visible = False
Else
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault + CheckBoxStartSPALTE_G).Object.Enabled = True
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault + CheckBoxStartSPALTE_G).Visible = True
End If
'In Spalte I
If Range(SSPALTE_I & iCheckboxPropertiesDefault + StartZelle) = "-" Then
nofunc = False
Range(SSPALTE_I & iCheckboxPropertiesDefault + StartZelle).Interior.ColorIndex = 0
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault + CheckBoxStartSPALTE_I).Object.value = Null
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault + CheckBoxStartSPALTE_I).Object.Enabled = False
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault + CheckBoxStartSPALTE_I).Visible = False
Else
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault + CheckBoxStartSPALTE_I).Object.Enabled = True
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault + CheckBoxStartSPALTE_I).Visible = True
End If
' Falls die Zelle für die Checkbox ein untermenü enthält, wird die Checkbox Enable = false gesetzt (bisher nur Spalte C und E)
If Range(SSPALTE_C & iCheckboxPropertiesDefault + StartZelle).Interior.Color = LIGHTBLUE Then
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault + CheckBoxStartSPALTE_C).Object.Enabled = False
End If
If Range(SSPALTE_E & iCheckboxPropertiesDefault + StartZelle).Interior.Color = LIGHTBLUE Then
ActiveSheet.OLEObjects("Checkbox" & iCheckboxPropertiesDefault).Object.Enabled = False
End If
Next iCheckboxPropertiesDefault
'
End Sub
Also es geht nicht darum, dass du/ihr den Code bearbeitet und aufs Detail untersucht. Dieser soll einfach nur einmal darstellen,
in welche Form ich an dem Projekt arbeite.
Ich möchte einfach mal eure Meinung über die idee hören und vielleicht Möglichkeiten so eine Aufgabe eleganter zu lösen..
Der Code soll in Vba bzw Excel bleiben.
Anbei noch ein Bild, wie das Interface aussieht.
Besten Dank!
http://www.directupload.net/file/d/4626/2agjvhq5_png.htm
http://www.directupload.net/file/d/4626/2agjvhq5_png.htm
|