Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
804to808
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
804to808
804to808
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Hochzähler bei neuer KW zurücksetzen

Hochzähler bei neuer KW zurücksetzen
29.09.2006 07:17:29
flux
Guten Morgen!
Ich bräuchte nochmal eure Hilfe!
Es handelt sich um diese Makro von UweD!
Vll könntest du mir da auch nochmal helfen!?

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Neu$, Konst$, Jahr$, KW As Byte, tmp As Date, Lnr%, Zelle
Set Zelle = Sheets("Tabelle1").Range("A1") 'Rechnungsnummer steht in A1
Jahr = Format(Date, "YY")
Konst = "M"
'aktuelle KW ermitteln
tmp = DateSerial(Year(Date + (8 - Weekday(Date)) Mod 7 - 3), 1, 1)
KW = ((Date - tmp - 3 + (Weekday(tmp) + 1) Mod 7)) \ 7 + 1
If Zelle.Value = "" Then 'neu anlegen
Neu = Konst & Jahr & KW & "1"
Else
If KW > Mid(Zelle, 4, 2) Then 'neue KW
Lnr = 1
Else 'gleiche KW
Lnr = Mid(Zelle, 6) + 1
End If
Neu = Konst & Jahr & KW & Lnr
End If
'Nr. in Zelle schreiben
Sheets("Tabelle1").Range("A1") = Neu
End Sub

Es müsste noch ein Zusatzfeature hinzugefügt werden:
Bei jeder neuen KW soll die fortlaufende Ziffer wieder bei "1" anfangen.
Danke im Voraus!
Gruß
Sebastian

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hochzähler bei neuer KW zurücksetzen
29.09.2006 07:57:45
UweD
Hallo
ich hatte dir nochmal ein Update veröffentlicht, wo ein Fehler beim Jahreswechsel behoben wurde... die solltest du nehmen.
unabhängig davon wird das Rücksetzen aber bereits gemacht.


      
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    
Dim Neu$, Konst$, Jahr$, KW As Byte, tmp As Date, Lnr%, Zelle
    
Set Zelle = Sheets("Tabelle1").Range("A1"'Rechnungsnummer steht in A1
    Jahr = Format(Date, "YY")
    Konst = 
"M"
    
'aktuelle KW ermitteln
        tmp = DateSerial(Year(Date + (8 - Weekday(Date)) Mod 7 - 3), 1, 1)
        KW = ((Date - tmp - 3 + (Weekday(tmp) + 1) 
Mod 7)) \ 7 + 1
    
'
    If Zelle.Value = "" Then 'neu anlegen, wenn Zelle noch leer
        Neu = Konst & Jahr & KW & "1"
    
Else
        
'**************
        'Wert aus Zelle wird geprüft, ob die enthaltene Woche Gleich der aktuellen Woche ist
        'es wird das Jahr mitbeachtet'
        'Ist Jahr und Woche ungleich aktuellemJahr und Woche, wird Laufende Nr. auf 1 gesetzt
        'Beispiel:
        '0638 ist ungleich 0639 Folge Zähler beginnt bei 1
        If Jahr & KW <> Mid(Zelle, 2, 4) Then 'neue KW
            Lnr = 1
        
'*********************
        'Ist der gelesene Wert gleich Jahr und aktuelle Woche
        'wird der Zähler um eins erhöht'
        '******************
        Else 'gleiche KW
            Lnr = Mid(Zelle, 6) + 1
        
End If
        
'
        Neu = Konst & Jahr & KW & Lnr
    
End If
    
    
'Nr. in Zelle schreiben
    Sheets("Tabelle1").Range("A1") = Neu
    
End Sub 


Gruß UweD
(Rückmeldung wäre schön)
Anzeige
AW: Hochzähler bei neuer KW zurücksetzen
29.09.2006 08:02:35
flux
Wenn sie auch noch Kochen kann würd ich sie gerne zur Frau nehmen... :)
DANKE!
AW: Hochzähler bei neuer KW zurücksetzen
29.09.2006 08:09:49
flux
Nun steht ja die Nummer immer in A1. Kann man es auch so hinbiegen das bei jedem speicher und wieder öffnen, der Wert in A1 festgesetz wird und sich in A2 die neue Nummer mit der fortlaufenden Zahl bildet? Und dann wieder in A3 usw...
AW: Hochzähler bei neuer KW zurücksetzen
29.09.2006 08:20:36
UweD
Hallo
jetzt kann das Makro aber auch kochen... :-)


      
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    
Dim LR&, TB, SP%, Neu$, Konst$, Jahr$, KW As Byte, tmp As Date, Lnr%, Zelle
    
Set TB = Sheets("Tabelle1")
    SP = 1 
'SpalteA
    LR = TB.Cells(Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte
    Set Zelle = TB.Cells(LR, SP)
    Jahr = Format(Date, 
"YY")
    Konst = 
"M"
    
'aktuelle KW ermitteln
        tmp = DateSerial(Year(Date + (8 - Weekday(Date)) Mod 7 - 3), 1, 1)
        KW = ((Date - tmp - 3 + (Weekday(tmp) + 1) 
Mod 7)) \ 7 + 1
    
'
    If Zelle.Value = "" Then 'neu anlegen, wenn Zelle noch leer
        Neu = Konst & Jahr & KW & "1"
        LR = 0
    
Else
        
If Jahr & KW <> Mid(Zelle, 2, 4) Then 'neue KW
            Lnr = 1
        
Else 'gleiche KW
            Lnr = Mid(Zelle, 6) + 1
        
End If
        
'
        Neu = Konst & Jahr & KW & Lnr
    
End If
    
    
'Nr. in Zelle schreiben
    TB.Cells(LR + 1, SP) = Neu
    
End Sub 


Gruß UweD
(Rückmeldung wäre schön)
Anzeige
AW: Hochzähler bei neuer KW zurücksetzen
29.09.2006 09:53:47
flux
Hallo Uwe!
Ich habe nun noch einige Änderungen an dem Makro vorgenommen um es auf unsre Tabelle abzustimmen.
Unter anderem auch, das die Nummer nicht bei jedem Sichern geändert wird.
Die Nummer müsste sich erst dann ändern, wenn sich die zweite Nummer auf die sie sich bezieht, ändert.
Wenn sich bei zweiten Nummer nichts ändert, dann soll auch die Numer nicht geändert werden.
Verständlich?
Nur gibt es hier Probleme mit der Dimension, da ein Stapelfehler auftritt.
Wie kann ich dies verhindern?
Hier nochmal mein mein/dein Makro:

Private Sub Worksheet_Change(ByVal SaveAsUI As Range)
Dim LR&, TB, SP%, Neu$, Konst$, Jahr$, KW As Byte, tmp As Date, Lnr%, Zelle
Set TB = Sheets("Datenbank")
SP = 10 'SpalteA
LR = TB.Cells(Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte
Set Zelle = TB.Cells(LR, SP)
'If [Eingabemaske!G30] = J + Zelle Then
'Sheets("Eingabemaske").Range("A1").Value = "keine überschreibung"
'Else
Jahr = Format(Date, "YY")
Konst = "M"
'aktuelle KW ermitteln
tmp = DateSerial(Year(Date + (8 - Weekday(Date)) Mod 7 - 3), 1, 1)
KW = ((Date - tmp - 3 + (Weekday(tmp) + 1) Mod 7)) \ 7 + 1
If Zelle.Value = "" Then 'neu anlegen, wenn Zelle noch leer
Neu = Konst & Jahr & KW & "1"
LR = 0
Else
If Jahr & KW <> Mid(Zelle, 2, 4) Then 'neue KW
Lnr = 1
Else 'gleiche KW
Lnr = Mid(Zelle, 6) + 1
End If
Neu = Konst & Jahr & KW & Lnr
End If
'Nr. in Zelle schreiben
'Worksheets("Eingabemaske").Activate
'Sheets ("Eingabemaske")
Set TB = Sheets("Eingabemaske")
TB.Cells(30, 7) = Neu
'End If
End Sub

Anzeige
AW: Hochzähler bei neuer KW zurücksetzen
29.09.2006 10:49:41
flux
Hallo Uwe!
Ich habe nun noch einige Änderungen an dem Makro vorgenommen um es auf unsre Tabelle abzustimmen.
Unter anderem auch, das die Nummer nicht bei jedem Sichern geändert wird.
Die Nummer müsste sich erst dann ändern, wenn sich die zweite Nummer auf die sie sich bezieht, ändert.
Wenn sich bei zweiten Nummer nichts ändert, dann soll auch die Numer nicht geändert werden.
Verständlich?
Nur gibt es hier Probleme mit der Dimension, da ein Stapelfehler auftritt.
Wie kann ich dies verhindern?
Hier nochmal mein mein/dein Makro:

Private Sub Worksheet_Change(ByVal SaveAsUI As Range)
Dim LR&, TB, SP%, Neu$, Konst$, Jahr$, KW As Byte, tmp As Date, Lnr%, Zelle
Set TB = Sheets("Datenbank")
SP = 10 'SpalteA
LR = TB.Cells(Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte
Set Zelle = TB.Cells(LR, SP)
'If [Eingabemaske!G30] = J + Zelle Then
'Sheets("Eingabemaske").Range("A1").Value = "keine überschreibung"
'Else
Jahr = Format(Date, "YY")
Konst = "M"
'aktuelle KW ermitteln
tmp = DateSerial(Year(Date + (8 - Weekday(Date)) Mod 7 - 3), 1, 1)
KW = ((Date - tmp - 3 + (Weekday(tmp) + 1) Mod 7)) \ 7 + 1
If Zelle.Value = "" Then 'neu anlegen, wenn Zelle noch leer
Neu = Konst & Jahr & KW & "1"
LR = 0
Else
If Jahr & KW <> Mid(Zelle, 2, 4) Then 'neue KW
Lnr = 1
Else 'gleiche KW
Lnr = Mid(Zelle, 6) + 1
End If
Neu = Konst & Jahr & KW & Lnr
End If
'Nr. in Zelle schreiben
'Worksheets("Eingabemaske").Activate
'Sheets ("Eingabemaske")
Set TB = Sheets("Eingabemaske")
TB.Cells(30, 7) = Neu
'End If
End Sub

Anzeige
AW: Hochzähler bei neuer KW zurücksetzen
29.09.2006 11:10:22
UweD
Hallo
wo tritt der Fehler auf?/ Welche Makrozeile ist dann aktiv?
Wie ist die genaue Fehlermeldung?
So kann ich damit nichts anfangen
Gruß UweD
(Rückmeldung wäre schön)
AW: Hochzähler bei neuer KW zurücksetzen
29.09.2006 11:14:59
flux
Laufzeitfehler 104 - nicht genügend Datenspeicher.
Das Problem tritt unregelmäßig auf.
AW: Hochzähler bei neuer KW zurücksetzen
29.09.2006 12:02:30
flux
Sorry, war die falsche Meldung. Hier die richtige:
Laufzeitfehler '1004':
Nicht genügend Stapelspeicher
AW: Hochzähler bei neuer KW zurücksetzen
29.09.2006 13:52:37
flux
Hi,
wenn ich Debugge, wird mir folgende Zeile markiert:
TB.Cells(30, 7) = Neu
Hilft euch das irgendwie?
AW: Hochzähler bei neuer KW zurücksetzen
29.09.2006 14:16:35
UweD
Hallo
das kann so sicherlich ohne Beispieldatei keiner nachvollziehen
Gruß UweD
(Rückmeldung wäre schön)
Anzeige
AW: Hochzähler bei neuer KW zurücksetzen
01.10.2006 19:01:17
Erich
Hallo Sebastian,
das Stapelspeicher-Problem tritt auf, weil du den Code jetzt im Worksheet_Change stehen hast.
Mit der Anweisung TB.Cells(30, 7) = Neu (ganz unten) änderst du das Blatt. Und das hat zur Folge,
dass Worksheet_Change wieder aufgerufen wird, wieder ändert, wieder aufgerufen wird, ...
Du kannst das vermeiden, indem du kurzzeitig die Ereignisverarbeitung unterbindest:
    Application.EnableEvents = False
TB.Cells(30, 7) = Neu
Application.EnableEvents = True
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige