Excel - Wenn neuer Tag dann...

killaVilla

Cadet 1st Year
Registriert
Okt. 2020
Beiträge
11
Halloooo!

Neuer Tag neues Problem, dieses mal fällt mir nur selbst leider keine Lösung ein:

Folgendes Problem:

Excel Tabelle wird täglich aktualisiert.

Wenn alle Werte = 0 sind und ein neuer Tag ist dann soll dem wert B25 +1 addiert werden, ansonsten 0 eintragen.

Leider scheitere ich an ein neuer Tag, ich weiß nicht wie man das löst... per VBA oder geht es per WENN Funktion?

pls send help :-)
 
Da kann ich jetzt ohne die Tabelle zu sehen nur raten, wie es klappen könnte.

Angenommen, du hast eine Spalte mit fixen Datumswerten, dann könntest du prüfen, ob diese kleiner sind, als der aktuelle Tag (Funktion: =HEUTE()).
 
  • Gefällt mir
Reaktionen: SpartanerTom
1604057502110.png

So in etwa
 
DatumOffice AOffice BOffice CSumme Office Alle
15.10.20201203
16.10.20200000

Ist das nicht etwas zu sehr um die Ecke gedacht? Du könntest es wie oben aufbauen und die Spalte "Summe Office Alle" mittels =ZÄHLENWENN([Bezug];0) auswerten.
 
Du musst erstmal definieren, was "ein neuer Tag sein" überhaupt bedeuten soll. Wann und gegenüber was soll ein neuer Tag sein? Seit dem letzten Öffnen der Arbeitsmappe? Seit dem letzten Schließen? Seit der letzten Änderung? Seit dem 1.1.1970?
Anschließend kann man sowas sicherlich mit VBA (onWorkbookOpen/Close Events bspw) machen, evtl. auch anders. Erstmal müsste man aber wissen, was denn überhaupt gesucht wird.
 
Ich würde 2 Zellen mit einem Datum versehen, eine davon mit der heute() Funktion, die andere mit einem Datum ohne Formel. Beim Öffnen der Datei würde ich ein Skript starten, welches beide Zellinhalte miteinander vergleicht. Wenn die heute() Funktion einen anderen Wert als die andere Zelle liefert, dann wird der Wert der heute() Funktion in die andere Zelle ohne Formel kopiert. Das ist dann der Moment, der als "Neuer Tag" getriggert wird. Jedes weitere Öffnen der Datei an dem Tag bewirkt dann nichts mehr, erst wieder das Öffnen am Folgetag.
 
Ein Skript das heute() auswertet kann weit eloquenter VBA-Datums-Funktionen auswerten.
Ich freue mich auch immer wenn ich mit «gestern» und «heute» hantieren muss.
CN8
 
danke für die vielen Antworten! :)

Ein neuer Tag würde bedeuten, das erste mal an dem man an einem neuen Tag das Skript öffnet.
Dann kann es schon automatisch einen krankheitsfreien Tag dazu addieren, ansonsten gibt man eben eine Zahl ein und der Zähler muss wieder 0 anzeigen.
Ergänzung ()

@Maaspuck :
Wie genau würdest du das in VBA schreiben?

Sub Workbook_Open()
.... ?

LG
 
Zuletzt bearbeitet:
Hmmmm... ist da nicht ein Denkfehler drin?
Wenn ich an einem Tag das erste Mal das Script öffne, wird ein neuer, krankheitsfreier Tag eingetragen - so weit, so gut. Allerdigs kann es doch sein, dass ich das Script öffne, um den kranken Kollegen einzutragen .... ?!
Von der Logik wäre es sinnvoller zu schauen, wann wurde das Script das letzte mal geöffnet, und trage dann die Anzahl Tage seit diesem Zeitpunkt ein.
 
Hmmm ja, die Datei wird täglich öfters geöffnet.

Wie setzt man das in die Tat um bzw wie kann man nachschauen wann das Script zuletzt geöffnet wurde?
 
Hi,

ich habe das mal kurz gemacht...siehe Anhang. In der Tat mit dem Event workbook_Open():

Code:
Private Sub Workbook_Open()
    '
    If ActiveWorkbook.Sheets("Blatt_1").Cells(1, 1) = ActiveWorkbook.Sheets("Blatt_1").Cells(2, 1) Then
        '
        MsgBox "Immer noch der gleiche Tag!"
        '
    Else
        '
        MsgBox "Ein neuer Tag!"
        ActiveWorkbook.Sheets("Blatt_1").Cells(1, 1) = ActiveWorkbook.Sheets("Blatt_1").Cells(2, 1)
        '
    End If
End Sub

Ich gehe z.B. davon aus, dass sich die Datei beispielsweise auf einem Netzwerklaufwerk befindet und von verschiedenen Leuten geöffnet wird, aber das spielt eigentlich keine Rolle.

Wann wurde die Datei das letzte Mal geöffnet?
Genau das steht ja in Zelle A1, allerdings bei der aktuellen Formatierung nur das Datum, aber das ließe sich problemlos bis zur Sekunde herunterbrechen. Die Anzahl der Tage seit dem letzten Öffnen oder gar (je nach Abreit etwas komplexer) die Anzahl der Arbeitstage ließen sich ebenfalls ausrechnen.
Man könnte sogar hinterlegen, wie oft das Skript geöffnet wurde, in dem man einfach einen Zähler mitlaufen lässt.

Anstelle der Messageboxen "Ein neuer Tag" oder "immer noch der gleiche Tag" könnte man dann wie auch immer auf das Ereignis reagieren.

Gruß

Maaspuck
 

Anhänge

  • Gefällt mir
Reaktionen: killaVilla
Und ergänzend dazu packt man dann in Workbook_Change eine Überprfung rein, ob der Krankenstand noch null ist, und wenn nicht, setzt man den Zähler für die krankheitsfreien Tage zurück. Außerdem ebenfalls den Datumsstempel.
 
Hi
Vielen lieben Dank @Maaspuck!!, du hast mir schon sehr viel weiter geholfen.

Ein kleine Frage hätte ich noch, falls du einen Tipp für mich hättest wäre ich dir seeeeeehr dankbar.
Deine Datei funktioniert bei mir, allerdings wenn ich den Code kopiere und anpasse an meine Datei, funktioniert es leider nicht mehr.

Hast du einen Tipp woran das liegen könnte?

LG!
 
Nun, ich vermute mal, Du hast kein Tabellenblatt mit dem Namen "Blatt_1". Außerdem muss in Zelle A2 von "Blatt_1" die Formel "=heute()" stehen und A1 muss ebenfalls ein Datum enthalten bzw. freibleiben, da das Datum aus A2 ggfs. in A1 hineinkopiert wird.
 
Hab meinen Fehler entdeckt, es muss in VBA in "DieseArbeitsmappe" nicht in die Tabelle.

Vielen lieben dank @Maaspuck für die Hilfe!!
Ergänzung ()

Ist es möglich, eine If oder Wenn-Funktion mit einer MsgBox zu gestalten? Quasi If MsgBox = Neuer Tag, dann ... else ...
LG
 
Zuletzt bearbeitet:
Freut mich, wenn ich helfen konnte.

Zu Deiner Frage:
Die Messagebox in meinem Beispiel hatte ich ja lediglich verwendet, um anzuzeigen, dass das Ereignis bereits eingetreten ist. Es diente also lediglich der Visualisierung.

Die Frage ist jetzt, wie Du weiter auf dieses Ereignis reagieren möchtest. Ich stelle mir dabei jetzt folgenden Situation vor:

Ja, es ist ein neuer Tag, aber ich möchte jetzt von Dir wissen, ob ich nun den Weg a) oder den Weg b) einschlagen soll? Das klingt jetzt etwas abstrakt, aber vielleicht soll der Nutzer beim Start des Makros an einem neuen Tag ja gefragt werden, ob alle bisherigen Daten des letzten Tages gelöscht werden sollen.

So etwas lässt sich dann wie folgt realisieren:

Code:
If MsgBox("Dies ist eine Abfrage", vbOKCancel, "Abfrage") = vbOK Then
    MsgBox "Es wurde ok geklickt"
Else
    MsgBox "Es wurde Cancel geklickt"
End If

Dabei ist zu beachten, dass es sich bei "vbOKCancel" und "vbOK" vordefinierte Systemkonstanten handelt. Davon gibt es noch einige mehr, die ebenso verwendet werden können. Falls Du da andere benötigen solltest, nutze die große Suchmaschine, da wirst Du schnell fündig.
Wenn man so etwas richtig individuell ohne Standardbuttons oder mit ggfs. weiteren Elementen gestalten möchte, dann kann man natürlich auch ein Userform kreieren und dieses dann bei Bedarf einblenden und entsprechend auf weitere Eingaben reagieren. Der Phantasie sind da keine Grenzen gesetzt.

Zielte Deine Frage in diese Richtung?

Viel Erfolg
 
Vielen Dank für die ausführliche Antwort!

Ich habe mir das jetzt in etwa so gedacht, falls du sagst es funktioniert so nicht, wäre super dann muss ich mir einen anderen Weg überlegen und lauf nicht in die falsche Richtung:

Das ganze in weiterhin in dieseArbeitsmappe:
Ergänzung ()

Code:
Private Sub Workbook_Open()
    If ActiveWorkbook.Sheets("Tier 1 Board").Cells(30, 3) = ActiveWorkbook.Sheets("Tier 1 Board").Cells(31, 3) Then
        'MsgBox "Immer noch der gleiche Tag!"
    Else
        'MsgBox "Ein neuer Tag!"
        ActiveWorkbook.Sheets("Tier 1 Board").Cells(30, 3) = ActiveWorkbook.Sheets("Tier 1 Board").Cells(31, 3)
        
        If Range("AB29") = "0"
            Range("AB30") = "+1"
            
        Else
            Range("AB30") = "0"
        End If
    End If
End Sub
Ergänzung ()

Leider funktioniert es noch nicht so, vielleicht liegt es daran das man nicht so einfach mit Range addieren kann?
Ich probiere mal rum, falls du einen Tipp hast wäre ich dir sehr sehr dankbar.
LG
 
Zuletzt bearbeitet:
Du müsstest beschreiben, was genau Du vorhast:

Was soll passieren, wenn "0" in der Zelle AB29 steht?

Wenn Du in AB29 mit Zahlen arbeitest und auch damit rechnen möchtest, dann würde ich auf die Anführungszeichen verzichten, das irritiert.

Im Moment passiert in Deiner Sub Folgendes:
Wenn das Skript an einem neuen Tag zum ersten Mal gestartet wird, wird der Inhalt von C31 in C30 kopiert. Soweit so gut, das hatten wir ja neulich bereits.
Dann wird abgefragt, ob in AB29 eine 0 steht und wenn das der Fall, wird in AB30 eine 1 hineingeschrieben ("+1" ist das Gleiche wie 1). Wenn in AB29 keine 0 steht, wird in AB30 eine 0 hineingeschrieben.

Wenn Du den Wert einer Zelle addieren möchtest, dann muss es lauten:

Range("AB30") = Range("AB30") +1


Jetzt wäre nur noch die Frage, wie sich der Wert in AB29 ändert, damit die Abfrage Sinn ergibt.

Ansonsten wäre noch ein Tipp evtl. von Nutzen. Du referenzierst auf ein Range und solange Du sicher bist, dass das richtige Tabellenblatt gemeint ist, ist auch alles gut. Aber nicht immer kann man dabei sicher sein und sollte ggfs. zur Sicherheit die Angabe präziser gestalten. Genau das habe ich am Anfang mit

ActiveWorkbook.Sheets("Tier 1 Board").Cells(30, 3)

auch gemacht, in dem ich nicht einfach nur "Cells(30, 3)" geschrieben habe, sondern auch das Tabellenblatt (Sheets("Tier 1 Board")) und auch die gerade aktive Arbeitsmappe mit angegeben habe.

Die genaueste Variante wäre natürlich:
Workbooks("MeineExcel").Sheets("Tabelle1").Range("AB29")

Alternativen sind dann:
ActiveWorkbook.Sheets("Tabelle1").Range("AB29")
Sheets("Tabelle1").Range("AB29")
ActiveSheet.Range("AB29")

oder eben nur

Range("AB29")

Je ungeanuer man dies angibt, desto mehr muss man im Makro natürlich dafür sorgen, dass man sich an der richtigen Stelle befindet.
 
Danke für die Antwort!
Ich versuche mal zu erklären was mein Vorhaben ist in Worten:

' Die Datei wird geöffnet und es wird überprüft ob ein neuer Tag ist.
' Falls keiner neuer Tag ist wird nichts gemacht
' Falls ein neuer Tag ist wird überprüft
ob die Summe F5,I5,L5,O5,R5 = 0 ergibt
' Falls Ja, dann wird der Zelle XY + 1 addiert
' Falls nicht wird die Zelle XY auf 0 gesetzt

Leider funktioniert alles noch nicht so wie ich mir das vorstelle.., hoffe du verstehst mein Vorhaben jetzt :)
 
Hm... schon verstanden... aber ich habe so das unbestimmte Gefühl, dass für den Zweck kein VBA erforderlich ist. Simple Summen-Funktionen können das auch ohne zusätzlichen Makro-Code.

Die Frage ist ja auch, was soll mit der Information angefangen werden?

Bei uns gilt zuerst, "keep it stupid and simple" oder frei nach Gunter Dueck: "Suche die genial einfache Lösung" 🙂.
 
  • Gefällt mir
Reaktionen: BeBur
Zurück
Oben