Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1404to1408
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fehler im Makro?

Fehler im Makro?
29.01.2015 08:49:10
Langmantl,
Hallo,
in beigelegter Liste habe ich ein Problem. In der Tabelle Feueralarmliste ist entweder ein Fehler in der Formel oder in den Makros.
Die Tabelle greift sich via Matrixformel die Werte aus der Tabelle MitarbeiterDB. in dieser Tabelle ist eine Userform hinterlegt. Dort kann man mittels Checkbuttons auswählen, ob der MA an allen Tagen, oder nur an bestimmten Tagen arbeitet.
Ferner ist in der Tabelle Feueralarmliste eine Formel hinterlegt, die Entweder ein A Angibt, wenn der Mitarbeiter an dem Tag arbeitet, oder N, wenn der nicht arbeitet. Durch bedingte Formatierung werden alle A ausgeblendet und alle N mit Rot markiert.
Mein Problem ist jetzt, dass wenn ich bei einem Mitarbeiter alle Tage als anwesend markiere funxt alles super, nehme ich aber mit den Checkbuttons einen Tag weg, dann zeigt er an diesem Tag in der Tabelle Feueralarmliste korrekt ein N an und markiert die Spalte, die anderen Anwesendheitstage werden jetzt als Fehler ausgegeben, das verstehe ich nicht, habe ich da in der Formel etwas verkehrt gemacht? Bitte Hilfe
Danke schon mal im voraus
Gruß
Benedikt
https://www.herber.de/bbs/user/95384.xlsm

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler im Makro?
29.01.2015 12:09:45
Luschi
Hallo Benedikt,
ich habe mir das mal angesehen. Die Matrix-Formeln sind soweit OK, nur das ich statt
ZEILE()-4) es so schreibe: ZEILE(A1). Wenn die Formel in Zelle 'B5' steht dann kommt
bei beiden Ausdrücken '1' heraus und in 'B6 der Wert '2'.
Das Formular ist auch OK und schreibt die ChekBox-Werte in die richtigen Zellen zurück.
Der Hauptgrund sind die Formeln im Tabellenblatt 'Feueralarmliste':
- so wie sie jetzt dastehen haben sie einen Klammersetzungsfehler
- insgesamt ist aber ein logischer Fehler drin
Ich mache das mal anhand der Formel in Zelle Feueralarmliste!Z8 fest.
- gewählt ist für Z8 (Montag) und AD8 (Freitag) Abwesend für die anderen Zellen Anwesend.
- jetzt trödle ich mal die Formel in Z8 auf
- das 4. Wenn() prüft zuerst, ob es eine freier Tag ist: OK
- dann prüft es, ob für diesen Tag ein 'Ja' in der entsprechenden Zelle steht: auch OK
- und jetzt kommt der logische Fehler
- steht in der Prüfzelle ein Ja, dann wird geprüft, ob am Freitag dieser Woche auch ein 'Ja'
  steht
- da frage ich mich, warum muß der Montag wissen was, am Freitag drin steht?
- Durch falsche Klammerung sucht er den passenden 'Sonst'-Fall, der aber nicht definiert ist
- diesen ersetzt er automatisch auf Fasch() und deshalb ist das Gesamtergebnis Falsch()
- würde man die Klammer richtig setzen, käme für Z8 auch 'N' heraus.
- Die Bereich.Verschieben Funktionen sind aber OK
Um Dir das besser zu verdeutlichen, habe ich die beiden Bereich.Verschieben()-Funktionen
aus der Zelle 'Z8' im Namensmanager dargestellt und heißen 'Mo_Z8' und Fr_AD8.
Rufe den Namensmanger mit Strg+F3 auf und plaziere den Curcor in die unter Eingabe-Textbox
(bezieht sich auf:).
Dann zeigt Excel den daraus resultierenden Zellenbereich mit einer umlaufenden Strichlinie an.
Wie gesagt, beide Bereich.Verschieben()-Funktionen stammen aus der gleichen Zelle Z8.
Habe noich ein bischen im Formular rumgespielt. Wenn du im Bereich 'Feueralarliste!D5:AH11
einen doppelklick per Maus machst, dann öffnet sich auch das Formular und der entsprechende MA ist sofort in der Listbox ausgewählt.
https://www.herber.de/bbs/user/95392.zip
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Fehler im Makro?
30.01.2015 08:22:47
Langmantl,
Hallo Luschi,
sorry, dass ich dir jetzt erst ein Feedback gebe, das liegt daran, dass du deine Datei als Zip Datei hinterlegt hast und wir hier im Betrieb einen so blöden Internetfilter haben, dass ein Arbeiten fast nicht möglich ist und ich es erst zu Hause mir ansehen konnte.
Danke erstmal für deine Datei und deine Ausführung, leider habe ich davon nicht wirklich viel verstanden, da scheint mein Excellwissen nicht ausreichend zu sein.
Außerdem scheinen deine Änderungen nicht zu funktionieren, bei dem Namen Kirschke besteht die Falschmeldung nach wie vor.
Gefallen tut mir die Funktion, dass wenn ich auf den Namen in der Tabelle klicke, sich das Formular öffnet. Das möchte ich gerne auf das gesamte Tabellenblatt, also auch die anderen Tabellen ausweiten, wie muss ich das machen?
Allerdings scheint da trotzdem ein Fehler vorzuliegen, in der Tabelle Mitarbeiter DB gibts einen Button, der das Formular öffnet, wenn ich darauf klicke zeigt er mir nach deinen Änderungen einen Debug Fehler an. Bitte checke das noch mal.
Gruß aus Berlin
Benedikt

Anzeige
AW: Fehler im Makro?
02.02.2015 07:27:47
Luschi
Hallo Benedikt,
nochmas zu den Formeln im Tabellenblatt 'Feueralarmliste'
Ich habe für die MA(in) 'Martina Kirschke' (und nur für diese) die Formeln in FeueralarListe
so abgepaßt, wie ich mir die Logik denken; hier mal anhand der Zelle 'F101' (03.02.2015)

=WENN(F$4="";"";WENN(ODER($B101="";WOCHENTAG(F$4;11)>5);"";WENN(ISTFEHLER(SVERWEIS(F$4; Frei!$A$3:$B$37;2;FALSCH))*1=0;SVERWEIS(F$4;Frei!$A$3:$B$37;2;FALSCH); WENN(BEREICH.VERSCHIEBEN(MitarbeiterDB!$J$2;VERGLEICH($B101;MitarbeiterDB!$A$3:$A$100;0); WOCHENTAG(F$4;11)-1)="Ja";"Ja";"N"))))
Die 2. Bereich.Verschieben() -Funktion habe ich entfernt, weil sie total unlogisch ist.
Die 1. Funktion davon ermittelt doch den Wochentag von Montag aus gesehen (MitarbeiterDB!$J$2).
Die von mir entfernte Funktion wollte zusätzlich noch von Freitag aus gesehen (MitarbeiterDB!$N$2)
den Wochentag berechnen. Das läuft aber ins Leere und deshalb konnte es klappen.
Zusätzlich habe ich noch ein Kalenderformular eingebaut, weil ich es doof fand,
das man ein Kalerderdatum eintippen soll. Die von M$ integrierten DatePicker-Steuerelemente
sind leider versionsabhängig und nicht sehr zuverlässig, wenn mehrere Excel-Versionen in
der Firma im Umlauf sind.
Ich habe allerdings das schreiben des ausgewählten tums in die Zelle der Tabelle 'Feueralarmliste' & 'Essensliste' auskommentiert, da ich mir nicht im Klaren bin, in welche Zelle das Datum geschrieben werden soll.
https://www.herber.de/bbs/user/95459.xlsm
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Fehler im Makro?
02.02.2015 08:28:06
Langmantl,
Hallo Luschi,
Vielen Dank, jetzt funktioniert alles super.
Aber noch Fragen zu deinen Veränderungen:
1.) Kann die Leertabelle, Tabelle1 gelöscht werden?
2.) Datum wird eingetragen in Feueralarmliste D4 bzw. Essensliste C3, Wie muss ich das Formular entsprechend ändern, damit er das Datum einträgt?
3.) Du hast die tolle Funktion eingebaut, dass bei Klick auf die Spalte sich das Formular öffnet und den Namen selektiert, dies möchte ich komplett auf die Feueralarmliste, sowie auf die Essensliste erweitern, wie und wo muss ich das Ändern
Der Fehler funktioniert jetzt super, vielen lieben Dank
Gruß Benedikt
https://www.herber.de/bbs/user/95462.xlsm

Anzeige
AW: Fehler im Makro?
02.02.2015 15:11:21
Luschi
Hallo Benedikt,
zu 1)
Die Leertabelle 'Tabelle1' kannst Du löschen, wenn es im gesamten Vba-Code kein Aufruf
wie diesen hier gibt: Sheets(2).Range("D4").Value = ...
Denn der bedeutet, das in das 2. Tabellenblatt, welches man im Tabellenregister der
Arbeitsmappe sieht, in die Zelle 'C3' ein Wert geschrieben wird. Deshalb vermeide Sheets
und schreibe besser:
- Worksheets("Essensliste").Range("C3").Value = ... oder
- Tabelle2.Range("C3").Value = ...
- wobei Tabelle2 der Vba-Codename für die Tabelle 'Essensliste' ist
- der Vorteil der Verwendung des Vba-Codenamens ist, das man den Tabellennamen auf der
  Excel-Oberfläche umbenennen kann, der Vba-Codename sich dadurch aber nicht ändert.
zu 2)
Die Tabellen 'Essensliste' & 'Feueralarmliste' besitze in ihren Klassenmodulen je eine
Ereignisroutine 'Private Sub Worksheet_Activate'.
Ersetze die letzte Codezeile: Sheets(2)...
gegen
Tabelle2.Range("C3").Value = CDate(Dat) 'in Tabelle Essensliste und
Tabelle4.Range("D4").Value = CDate(Dat) 'in TaTabelle 'Feueralarmliste
Das Klassenmodul 'cls_Label' kannst Du löschen, da hier sowieso schon alle Vba-Zeilen auskommentiert sind.
Das Klassenmodul 'cls_Button' muß dagegen bleiben, denn es gehört zum Formular 'UF_PickDate'
und steuert die 42 Buttons dieses Formulars. Dies ist eine spezielle POrogrammiertechnik, damit man im Formular nicht 42 Ereignisroutinen 'Private Sub Button1_Click()' usw. schreiben muß.
Hier werden die Click_Ereignosse in das Klassenmodul umgeleitet, welches dann weiß, welches der vielen Buttons im Formular gerade gedrückt wurde.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Fehler im Makro?
04.02.2015 07:54:28
Langmantl,
Hallo Luschi,
habe die Veränderungen vorgenommen, er zeigt mir einen DebugFehler an.
Was noch nicht geklärt ist, die Möglichkeit des Doppelklickens auf einen Bereich, der dan das Formular mit dem selektiereten Namen öffnet, das hätte ich gerne auch in der Tabelle Essensliste, habe es selbst probiert und ebenfalls eine Fehlermeldung erhalten.
Hier die Datei mit den Einbauten
https://www.herber.de/bbs/user/95531.xlsm
Gruß Benedikt

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige