Makro über VBA erweitern
#31
Hi RPP63,

also ich habe mir alle Dateien angeschaut. Bei der verlinkten ist mir aber, außer dass die Farben dort besser aktualisiert wurden, kein Unterschied aufgefallen. Erst in meiner zuletzt angefügten Datei wird sichtbar, was daran mein Problem ist. Das greift die Mappe noch nicht auf.
Antworten Top
#32
Dann hast du die Datei nicht getestet, weder den Code angeschaut.
Er macht genau was du wolltest.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#33
Nein, macht er nicht. Schau mal in die Datei die ich hochgeladen habe und fülle die Felder aus.
Kann es sein, dass du einen meiner Beiträge überlesen hast?

Farblich passt das, aber es sind untereinander gar keine Beziehungen hergestellt.

Habe mir jetzt nochmal die Datei aus dem Beitrag angeschaut. (https://www.clever-excel-forum.de/Thread...#pid251700)

Wenn ich jetzt alle Felder ausfülle, dann wird nicht mal mehr der Button rot.  Huh

Was aber dennoch nichts daran ändert, dass die farbigen Felder nicht der Logik folgen die ich drin habe. Vielleicht waren die IF Abfragen gar nicht so verkehrt, weil man die Prima verschachteln kann zu
Wenn Dann AberNurWennNichtGleichzeitig - UndAuchNichtWenn - Sonst - UndNurOhne. (so ungefähr... 19 )
Antworten Top
#34
Also die erste Datei von snb = 3 Downloads
Die erste Datei vom Bastler = 3 Downloads
Die zweite Datei von snb = 4 Downloads (weil ich es nochmal probiert habe)
Meine abgeänderte Datei = 1 Download (das war ich)

Wieso in Frage stellen ob ich in die Datei geguckt habe? In meinem Upload  habe ich mein Problem Veranschaulicht, nur dort hat niemand reingeschaut.  Confused
Antworten Top
#35
Moin Suprasod,

dann versuch's mal mit der nächsten Fassung. Die Anzahl und Position der Pflichtzellen kannst Du im Array ändern. Der PDF wird wieder deaktiviert, wenn ein User noch einen Eintrag wieder löscht. Und alles hübsch bunt ... Wink


.xlsb   Vollständig_array_format.xlsb (Größe: 25,21 KB / Downloads: 2)

Nachtrag: Sorry Deine Verschachtelungen hatte ich bislang übersehen und aus Deinem Upload bin ich dies bezüglich nicht schlau geworden. Ich habe zwar gesehen, dass im Ablauf teilweise die automatischen Eintragungen verschwiden, konnte aber nicht verstehen warum.

Nur so als Idee: Bevor Du wieder if...then rotierst, wirf noch mal einen Blick auf meine Select Case-Lösung. Vielleicht lässt sich das für Deinen Bedarf sinnvoll kombinieren.

Grüße

d`r Bastler von den VBAsteleien.de
Win 10 & 11, Office 2019 & 2021 & macOS X.15, XL 2019
Antworten Top
#36
Vermutlich erkläre ich das zu kompliziert.

Also kurz zum tatsächlichen Antrag...

Du kannst damit 4 verschiedene Zeitfenster beantragen. 
1. ein einzelner Samstag
2. für einen ganzen Monat (Samstags ist dort nicht enthalten und muss separat beantragt werden)
3. Für eine Arbeitswoche
4. Für die seltenen Fälle auch mal ein spezieller Zeitraum.

Keine der 4 Möglichkeiten lässt sich kombinieren.

In den Feldern D8, D10, D12 und D14 setzt man quasi ein Kreuz, also eine Auswahl, und damit scheiden automatisch alle 3 anderen Möglichkeiten aus. 
Warum? Weil sonst kombiniert wird.
Frei nach dem Motto, wer nicht wagt, der nicht gewinnt.

Also habe ich die Formatierung folgendermaßen gebaut... 
Sobald man in einer Zeile irgendein Feld ausfüllt, und sei es zuerst das Datum, verschwinden automatisch die Formatierungen der anderen 3 Zeilen. Alles wird unsichtbar. Sogar die Schriftfarbe, falls jemand die Felder dennoch befüllen möchte.
   
Gleichfarbige Felder gehören zusammen. Was eine andere Farbe hat wird, Inkl. der Beschriftung der leeren Felder, ausgeblendet.
Beispiel für die bedingte Formatierung: =ODER(D8<>"";G8<>"") gilt für =D10;G10;D12;G12;I12;D14;G14;I14 (bedingte Formatierung mit einer Formel)

Ähnliches gilt für die Felder D14, D19 und D21. Sobald 1 von den 3 Feldern ausgewählt wurde, sind die anderen beiden kein Pflichtfeld mehr. Ein Feld muss ausgewählt werden, mehrere Felder sind optional.
Antworten Top
#37
In deiner Problemstellung ist die Befüllung von 10 oder 11 Zellen notwendig.
Genau das überprüft der Code in Worksheet_change: countA()>9
Versuch auch den Code zu verstehen : z.B len(trim(cells(26,2)))

Code hatte noch ein Typo:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    With CommandButton1
        .Enabled = (Application.CountA(Range("D8,D10,D12,D14,G8,G10,G12,G14,I12,I14,D17,D19,D21,P8,P10,P12,P14,B26")) > 9) * (Len(Trim(Cells(26, 2))) > 10)
        .BackColor = IIf(.Enabled, vbRed, &HE0E0E0)
    End With
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#38
Moin,

und bevor ich jetzt weiter im Dunkeln stochere, was Du denn so kompliziert umsetzen willst, habe ich mal mein Modell einer Lösung gebastelt. Eine Userform, die
  • nur die vier von Dir genannten Antragszeiträume zulässt
  • dafür jeweils genau die Werte zur Auswahl stellt, die tatsächlich möglich sind bzw. zur korrekten Eingabe zwingt
  • und erst dann einen Druck zulässt, wenn alle Pflichtfelder ausgefüllt sind.
Wird die Userform geschlossen, kann sie mit F12 wieder aufgerufen werden.


.xlsb   usfÜberzeit.xlsb (Größe: 28,58 KB / Downloads: 3)

Dann mal viel Spaß!

Kommentar als Nachtrag:

Durch die Userform und ihre Optionen sind all die Tricksereien mit Menüs ausblenden/unzugänglich machen, Druckervorgaben usw. unnötig. Wenn der User nicht genau das tut, was er soll und z.B. die Userform wegklickt, weil er in die Menüs will, wird XL einfach geschlossen und er kann von vorne anfangen. Natürlich bleiben ihm vorher Möglichkeiten der Korrektur.

Böswillige Kollegen daran zu hindern, z.B. bei Begründungen Leerzeichen einzutippsen, um die von Dir erwartete Mindestlänge auszutricksen, lässt sich mit Textboxen erheblich leichter abfangen, als mit Tabellenzellen.

Offenbar ist die Fehlervermeidung ein Schwerpunkt Deiner Arbeit.

Deshalb mein Vorschlag dem User prinizipiell wo immer es geht nur Auswahlmöglichkeiten zur Verfügung zu stellen. In meiner aktuellen Version kann der User z.B. die von/bis-Zeiträume noch manuell eingeben. Das lässt sich aber auch durch Fehler-resistente Kalenderauswahlboxen ersetzen. Das meine ich besonders bezüglich der Personendaten.

Hier solltest Du einen Mechanismus vorschalten, der den User zwingt sich mit einer Anmeldung zu legitimieren. (Nicht, dass Kollege A für den Kollegen B Überstunden beantragen kann, und B nichts davon weiß.) Dann werden seine Personendaten aus einer Tabelle/Datenbank oder dem Active Directory unmittelbar im Antragsformular bereitgestellt. Notwendige Änderungen (Änderung Familienstand, Adresse, Telefonummer, etc.)) kann nur die Personalabteilung bzw. ein Administrator in die Tabelle einpflegen.

Kommen hier nun Deine Wünsche/Vorgaben und mein Konzept sich allmählich näher?

Schönen Abend noch!

d`r Bastler von den VBAsteleien.de
Win 10 & 11, Office 2019 & 2021 & macOS X.15, XL 2019
Antworten Top
#39
Ich will nochmal klar herausstellen, dass es sich nicht um zu erfüllende Wünsche handelt. Alles was ich beschrieben habe, funktioniert auch. Ich bin nur der Einladung gefolgt, die ein oder andere IF Schleife weglassen zu können. Meine einzigen tatsächlichen Themen waren ein eventuelles Update, welches ich für mich bereits ausgeschlossen habe, da der Verweis auf einen Direkt Download der neuen Version ja bereits funktioniert und ich nicht bereit bin mich mit xml Erweiterungen zu beschäftigen. Das ist es mir nicht wert. Sind ja auch keine 1500 Kollegen die den Antrag nutzen.

Zitat:Kommentar als Nachtrag:

Durch die Userform und ihre Optionen sind all die Tricksereien mit Menüs ausblenden/unzugänglich machen, Druckervorgaben usw. unnötig. Wenn der User nicht genau das tut, was er soll und z.B. die Userform wegklickt, weil er in die Menüs will, wird XL einfach geschlossen und er kann von vorne anfangen. Natürlich bleiben ihm vorher Möglichkeiten der Korrektur.
Der Schreibschutz der Struktur gibt bereits eine Menge her. Es gibt nur ein paar Felder zu befüllen, was in der Regel auch klappt. Das einzige was im Menü unerwünscht ist, ist die Möglichkeit zu Drucken.
Daher blende ich den Mist einfach aus. Die IF Abfrage weißt den Nutzer ja explizit auf den fehlenden Inhalt hin.

Code:
Sub Ausblenden()
    CommandBars("Worksheet Menu Bar").Enabled = False
    Application.DisplayFullScreen = True
    ActiveWorkbook.Protect Windows:=True
End Sub

Sub Einblenden()
    ActiveWorkbook.Unprotect
    CommandBars("Worksheet Menu Bar").Enabled = True
    Application.DisplayFullScreen = False
End Sub
Zitat:Böswillige Kollegen daran zu hindern, z.B. bei Begründungen Leerzeichen einzutippsen, um die von Dir erwartete Mindestlänge auszutricksen, lässt sich mit Textboxen erheblich leichter abfangen, als mit Tabellenzellen.
Bei der Prüfung wird zuerst ein verstecktes Feld kopiert und dann an der Stelle der Begründung eingefügt. In dem versteckten Feld steht lediglich "=GLÄTTEN(B26)".
Man kann also so viele Leerzeichen rein packen wie man möchte. Nach der Prüfung sind die weg.

Zitat:Offenbar ist die Fehlervermeidung ein Schwerpunkt Deiner Arbeit.
Ein Stück weit ja und ein Stück weit der Versuch, dass im ersten Anlauf alles ausgefüllt ist, was an Daten vorhanden sein muss. Ständig fehlenden Kleinigkeiten hinterherzurennen sollte weitestgehend vermieden werden.
Vollständigkeit ist das Stichwort.

Zitat:Deshalb mein Vorschlag dem User prinzipiell wo immer es geht nur Auswahlmöglichkeiten zur Verfügung zu stellen. In meiner aktuellen Version kann der User z.B. die von/bis-Zeiträume noch manuell eingeben. Das lässt sich aber auch durch Fehler-resistente Kalenderauswahlboxen ersetzen. Das meine ich besonders bezüglich der Personendaten.
Das habe ich versucht. Der Nutzer muss keine Daten mehr eintragen, die Ihn selbst betreffen (Kommen aus der ActiveDirectory). Er muss nur noch ankreuzen und ein oder zwei Datumsangaben eingeben. Die Monatsauswahl besitzt ein DropDown Menü. Beim Datum hatte ich bereits einen DropDown Kalender, habe diesen aber wieder entfernt, weil er bei einigen Nutzern zu Fehlern geführt hat, die das Makro angehalten haben. 

Zitat:Hier solltest Du einen Mechanismus vorschalten, der den User zwingt sich mit einer Anmeldung zu legitimieren. (Nicht, dass Kollege A für den Kollegen B Überstunden beantragen kann, und B nichts davon weiß.) Dann werden seine Personendaten aus einer Tabelle/Datenbank oder dem Active Directory unmittelbar im Antragsformular bereitgestellt. Notwendige Änderungen (Änderung Familienstand, Adresse, Telefonummer, etc.)) kann nur die Personalabteilung bzw. ein Administrator in die Tabelle einpflegen.
Kollege A kann durchaus für Kollege B Stunden beantragen. Der Antrag bezieht sich auf mehrere Personen. In der Regel setzt sich ein Teamleiter oder eine Teamassistenz hin und erstellt den Antrag für seine Mitarbeiter. Im zweiten Schritt muss das dann eh noch von der Führungskraft signiert werden. Kann auch nur die Führungskraft machen. Diese wäre dann Ersteller und Genehmiger. Außerdem geht es beim Thema Mehrarbeit nicht nur darum Überstunden machen zu müssen, sondern darum die Überstunden, welche sowieso auflaufen, auch mit einem Mehrarbeitszuschlag zu vergüten. Beim Samstag und Sonntag entscheidet der Antrag darüber, ob die Kollegen überhaupt her kommen dürfen. Keine Zustimmung, keine Arbeit am Wochenende.

Übrigens, so sieht das aktuell aus.
   
Antworten Top
#40
Rainbow 
Na - dann ist ja alles gut ...
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste