Clever-Excel-Forum

Normale Version: Makro für Enzo versagt genau bei 7:00 Uhr
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Kollegen

im Augenblick bin ich ratlos über ein Problem, das ich nicht zu lösen vermag.  Es geht um die Beispielmappe für Enzo, im Thread  "Namen zuordnen mit Einschränkungen"  wo ich entnervt nicht weiter weiss.

Die Datei ist als xlsx damit sie jeder öffnen kann, das Makro ist in Sayfa1 als Text.  Es gehört in die Tabelle Spielplan, wird per Button gestartet.  Teile habe ich durch Goto Start deaktiviert zum besseren Testen.  Das Problem ist in der roten Zeile.

Ich vergleiche in Zeile 2 die Uhrzeiten für Spiele Aktionen, wobei es Überlauf geben kann wenn kein Personal zur Verfügung steht.  Um 7:00 tritt dieser Fall ein.  Komischerweise werden die Kollegen korrekt zugeordnet, der Überlauf landet aber in Spalte 46!!  Seltsamerweise nur bei der Uhrzeit 7:00 Uhr, die anderen Zeiten stimmen.  Das kapier ich einfach nicht!!

Hat da jemand einen Tipp wie ich das Problem lösen kann.  Waere sehr nett von euch.

mfg  Gast 123
Hallo Gast 123

vorab ohne Test ein Hinweis.

Du überprüfst zwei Gleitkommazahlen auf Gleicheit. Das führt häufig zu scheinbaren Fehlern. Versuch einmal den Absolutwert der Differenz auf kleiner x zu prüfen.



ps. Bei der 4. AC-Zelle ist die Differenz ~3,3*10^-17. Die Werte sind also nicht gleich.
Hi

Wau, riesen Projekt.


Zitat:Ich vergleiche in Zeile 2 die Uhrzeiten
Nachfrage. Wie vergleichst du denn die Zeiten miteinander?
Evtl. liegt da schon das Problem. Denn 07:00:00 ist nicht unbedingt gleich 07:00:00.
 
Siehe Anhang
[attachment=21481]

Gruß Elex
Hallo,

ich konnte den Fehler leider nicht reproduzieren.
Hallo und Danke an alle

Zitat:Absolutwert der Differenz auf kleiner x zu prüfen

@Ego   Danke für den Hinweis, weil ich kein Mathematiker bin, wie macht man das in VBA in der Praxis??
 
@Elex  Danke für das Beispiel, ich probiere es aus.

mir fiel bei einem Text auf warum es mit * 1440 nicht klappen konnte.  Das Problem bei der .Zeile 2 ist, das dort Uhrzeiten drin stehen und auch Text wie:  Aktion, Material, Bemerkungen. Das kann man nicht multiplizieren!

Eine lange Arbeit, an der Endlösung für den Überlauf arbeite ich noch. Würde mich freuen wenn ich das ans laufen bekomme. Ich sehe aber auch immer wieder das mir bestimmtes Fachwissen einfach fehlt.  Mein Vergleich war wohl zu simpel:  ach ja, in Zeile 2 stehen die Uhrzeiten als Formel, keine Werte!  If Ac.Value <> AC.Offset(-1,0).Value then    Ironie, bei manchen Zeiten klappt es problemlos, nur bei 7:00 Uhr leider nicht!!

Frage:   korrupte Beispiel Datei
Die letzte Beispiel Datei von Enzo hat einen merkwürdişgen Effekt!!  Beim Öffnen konnte ich die Reiter nicht umschalten. Drückt man auf Erfassung, erscheint der Text "Erfassung" über dem Reiter "Endergebnis".  Drücke ich Sayfa 1 wird Erfassung oder Endergebnis geöffnet. Ein direktes Öffnen war nicht möglich. Nur beim Wechsel wurde ein anderer Reiter geöffnet. Was kann das für eine Ursache/ Bewandniss haben??

Nach dem Speichern als xlsx Datei, nur zum Testen, war der Effekt verschwunden. Das Makro startet nicht über Target, nur über den Button!!

mfg  Gast 123
Hallo Gast 123

zB so:
Code:
    For d = 16 To Spmax Step 3  '45 Spalten von P-AS
      If Abs(AC.Value - .Cells(2, d)) < 0.0001 Then Exit For
    Next d

ps. Achtung! "Step 3"
Hallo Helmut

danke für den Code, ich habe ihn gleich eingebaut und schicke Enzo gleich die neue Datei zum Testen. Bin gespannt wie es klappt.

herzlichen Dank für deine Hilfe!

mfg  Gast 123
Oder

Tabelle1.Range("I1:M38") = tabelle1.listobjects(1)


Code:
Sub M_snb()
   sn = Tabelle1.ListObjects(1).Range
   c00 = "  7:00  8:00  9:15 10:30 11:45 13:30 14:45 16:00 17:15 18:30"
   ReDim sp(UBound(sn), 31)
   
   For j = 2 To UBound(sn)
     For jj = 0 To UBound(sp)
         If sp(jj, 0) = sn(j, 5) Or sp(jj, 0) = "" Then Exit For
     Next
     sp(jj, 0) = sn(j, 5)
     y = 3 * InStr(c00, Format(sn(j, 1), "h:mm")) \ 6
     sp(jj, y) = sn(j, 2)
     sp(jj, y + 1) = sn(j, 3)
     sp(jj, y + 2) = sn(j, 4)
    Next
    
    Tabelle1.Range("O3:AS3").Resize(jj) = sp
End Sub
Hallo  snb

Danke für deinen Code, ich habe ihn ins Beispiel geladen und werde ihn morgen mal testen.

Ich wünsche dir ein frohes Weihnachtsfest und ein glückliches neutes Jahr....

mfg  Gast 123