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

Fehler - Geburtstage 366 Tage warum nicht länger?

Fehler - Geburtstage 366 Tage warum nicht länger?
28.06.2004 10:27:07
Andy
Hallo,
habe in einem fortlaufenden Kalender (Heute - 90 und Heute + 366;
also von Zeile 2 bis Zeile 457) Geburtstage als Kommentare ent-
halten. Das funktioniert sehr gut und sieht so aus:
=================================================================


      
Sub Notiz_Geburtstag()
   
Dim Alter As Byte
   
Dim WS1 As Worksheet, WS2 As Worksheet
   
Dim iZeile As Long, iiZeile As Long
   Application.ScreenUpdating = 
False
   
   
Set WS1 = Worksheets("Dienstplan")
   
Set WS2 = Worksheets("Geburtstage")
   
   
'Selection.ShapeRange.ScaleWidth 1.74, msoFalse, msoScaleFromTopLeft
   PW_entf
   
For iZeile = 1 To WS1.Range("A65536").End(xlUp).Row
      
If Not WS1.Cells(iZeile, 1).Comment Is Nothing Then WS1.Cells(iZeile, 1).ClearComments
   
Next iZeile
   
   
For iZeile = 4 To WS2.Range("B65536").End(xlUp).Row
      
For iiZeile = 2 To WS1.Range("A65536").End(xlUp).Row
         
If Day(WS1.Cells(iiZeile, 1)) = Day(WS2.Cells(iZeile, 3)) And _
            Month(WS1.Cells(iiZeile, 1)) = Month(WS2.Cells(iZeile, 3)) 
Then Exit For
         
Next iiZeile
         
         
With WS1.Cells(iiZeile, 1)
            Alter = Year(WS1.Cells(iiZeile, 1)) - Year(WS2.Cells(iZeile, 3))
            
If .Comment Is Nothing Then
               .AddComment WS2.Cells(iZeile, 2).Value & ": " & Chr(10) & Alter & " Jahre"
               
'=====================================================
               ' - Format der Geburtstage -
               .Comment.Visible = True
               
With Selection.Font
                  .Name = "@Arial Unicode MS"
                  .FontStyle = "Fett"
                  .Size = 11
                  .Strikethrough = 
False
                  .Superscript = 
False
                  .Subscript = 
False
                  .OutlineFont = 
False
                  .Shadow = 
False
                  .Underline = xlUnderlineStyleNone
                  .ColorIndex = 3
               
End With
               
With .Comment.Shape
                  .Line.Weight = 1.5
                  .Line.DashStyle = msoLineSolid
                  .Line.Style = msoLineSingle
                  .Line.Transparency = 0#
                  .Line.Visible = msoTrue
                  .Line.ForeColor.RGB = RGB(0, 0, 0)
                  .Line.BackColor.RGB = RGB(255, 255, 255)
                  .Fill.Visible = msoTrue
                  .Fill.ForeColor.SchemeColor = 9
                  .Fill.BackColor.RGB = RGB(178, 178, 142)
                  .Fill.Transparency = 0#
                  .Fill.TwoColorGradient msoGradientFromCenter, 2
                  .LockAspectRatio = msoFalse
                  .Height = 70.5
                  .Width = 113.25
               
End With
               
'=====================================================
            Else
               .Comment.Text Text:=.Comment.Text & Chr(10) & WS2.Cells(iZeile, 2).Value & ": " & Chr(10) & Alter & " Jahre"
            
End If
         
End With
      
Next iZeile
      
'=========================================================
      ' - Format Rücksetzen von Feld B2 -
      Range("B3").Select
      Selection.Copy
      Range("B2").Select
      Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
         
False, Transpose:=False
      Application.CutCopyMode = 
False
      ActiveSheet.Protect DrawingObjects:=
True, Contents:=True, Scenarios:=True
      
'=========================================================
      Application.ScreenUpdating = True
      PW_setzen
End Sub 


=================================================================
Erst mal wird mir immer das Feld B2 dabei versaut, deshalb die
Rückstellung des Feldes und das Schlimme ist aber, das er zwar
bei Heute - 90 anfängt, dann aber bei 366 aufhört, wenn es den
Geburtstag schon gibt. Was habe ich falsch gemacht?
Wäre schön, wenn mir jemand den Fehler zeigen kann oder sagt,
was ich verändern muss.
Gruß
Andy
Geburtstage als Kommentar gut, aber nur 366 Tage?
28.06.2004 11:36:41
Andy
Hallo,
vielleicht habe ich mich nur schlecht ausgedrückt, der Code:


      
Sub Notiz_Geburtstag()
   
Dim Alter As Byte
   
Dim WS1 As Worksheet, WS2 As Worksheet
   
Dim iZeile As Long, iiZeile As Long
   Application.ScreenUpdating = 
False
   
   
Set WS1 = Worksheets("Dienstplan")
   
Set WS2 = Worksheets("Geburtstage")
   
   
'Selection.ShapeRange.ScaleWidth 1.74, msoFalse, msoScaleFromTopLeft
   PW_entf
   
For iZeile = 1 To WS1.Range("A65536").End(xlUp).Row
      
If Not WS1.Cells(iZeile, 1).Comment Is Nothing Then WS1.Cells(iZeile, 1).ClearComments
   
Next iZeile
   
   
For iZeile = 4 To WS2.Range("B65536").End(xlUp).Row
      
For iiZeile = 2 To WS1.Range("A65536").End(xlUp).Row
         
If Day(WS1.Cells(iiZeile, 1)) = Day(WS2.Cells(iZeile, 3)) And _
            Month(WS1.Cells(iiZeile, 1)) = Month(WS2.Cells(iZeile, 3)) 
Then Exit For
         
Next iiZeile
         
         
With WS1.Cells(iiZeile, 1)
            Alter = Year(WS1.Cells(iiZeile, 1)) - Year(WS2.Cells(iZeile, 3))
            
If .Comment Is Nothing Then
               .AddComment WS2.Cells(iZeile, 2).Value & ": " & Chr(10) & Alter & " Jahre"
               
'=====================================================
               ' - Format der Geburtstage -
               .Comment.Visible = True
               
With Selection.Font
                  .Name = "@Arial Unicode MS"
                  .FontStyle = "Fett"
                  .Size = 11
                  .Strikethrough = 
False
                  .Superscript = 
False
                  .Subscript = 
False
                  .OutlineFont = 
False
                  .Shadow = 
False
                  .Underline = xlUnderlineStyleNone
                  .ColorIndex = 3
               
End With
               
With .Comment.Shape
                  .Line.Weight = 1.5
                  .Line.DashStyle = msoLineSolid
                  .Line.Style = msoLineSingle
                  .Line.Transparency = 0#
                  .Line.Visible = msoTrue
                  .Line.ForeColor.RGB = RGB(0, 0, 0)
                  .Line.BackColor.RGB = RGB(255, 255, 255)
                  .Fill.Visible = msoTrue
                  .Fill.ForeColor.SchemeColor = 9
                  .Fill.BackColor.RGB = RGB(178, 178, 142)
                  .Fill.Transparency = 0#
                  .Fill.TwoColorGradient msoGradientFromCenter, 2
                  .LockAspectRatio = msoFalse
                  .Height = 70.5
                  .Width = 113.25
               
End With
               
'=====================================================
            Else
               .Comment.Text Text:=.Comment.Text & Chr(10) & WS2.Cells(iZeile, 2).Value & ": " & Chr(10) & Alter & " Jahre"
            
End If
         
End With
      
Next iZeile
      
'=========================================================
      ' - Format Rücksetzen von Feld B2 -
      Range("B3").Select
      Selection.Copy
      Range("B2").Select
      Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
         
False, Transpose:=False
      Application.CutCopyMode = 
False
      ActiveSheet.Protect DrawingObjects:=
True, Contents:=True, Scenarios:=True
      
'=========================================================
      Application.ScreenUpdating = True
      PW_setzen
End Sub 


funktioniert sehr gut. Da ich aber einen laufenden Kalender habe,der von
Heute - 90 Tage zählt und auch von Heute + 366 Tage habe ich das Problem,
das jeder Geburtstag eingetragen wird. Da ja aber durch die Heute - 90
auch aktuelle Geburtstage 2x im Kalender sein müssten fehlt mir immer
der neue Geburtstag bei den Heute + 366 Kalenderblättern. Was ist falsch
am Code oder wie kann ich das verhindern, das er nur 1x den Geburtstag
einträgt.
Außerdem wird wie schon gesagt durch den Code immer das Feld B2 versaut
und ich muss es per neuen Code zurücksetzen. Was habe ich falsch gemacht?
Wäre schön, wenn jemand eine Idee hat.
Gruß
Andy
Anzeige
AW: Geburtstage als Kommentar gut, aber nur 366 Tage?
Hans
Hallo Andy,
das ist ja ein ganz hübscher Code, aber es wird Dir evtl. keiner durch Betrachten des selben eine Lösung anbieten können. Du musst halt mal richtig Debuggen und schrittweise durch gehen und den Fehler einzingeln.
BTW: A weng umständlich finde ich die
...Comment Is Nothing Abfrage nim doch einfach den Gesamtrange .ClearComments, das ist sich schneller und klarer als eine For-Schleife...
Gruß HW
AW: Geburtstage als Kommentar gut, aber nur 366 Tage?
28.06.2004 11:57:47
Andy
Hallo HW,
mit dem Debuggen wie meinst du das, wenn kein Fehler auftritt? Es ist
ja kein Programmierfehler sondern nur eine sichtbare Ungereimtheit, die
sich eben dahingehend auswirkt, dass jeder Geburtstag nur 1x eingetragen
wird, auch wenn er auf Grund der Heute - 90 2x vorkommen müsste. Wenn ich
den Kalender nur die 366 Tage nehme, dann ist ja alles ok.
Bitte sag mir nun, wie du das meinst mit dem Debuggen.
Gruß
Andy
Anzeige
AW: Geburtstage als Kommentar gut, aber nur 366 Tage?
GerdZ
Hallo Andy,
wie HW bereits geschrieben hat, lassen sich die Kommentare einfacher löschen:
WS1.Range("A:A").ClearComments löscht alle Kommentare in Spalte A
Dein Problem mit Zelle B2 kommt von "With Selection.Font"
Selection bezieht sich auf die ausgewählte Zelle B2.
Das der zweite Geburtstag nicht kommentiert wird, liegt an "Exit For".
Lass es weg und schreibe das "Next iiZeile" mit einem "End If" vor die Zeile "Next iZeile".
Gruß
Gerd
Jeder Geburtstag als Kommentar nur einmal warum?
28.06.2004 12:10:19
Andy
Hallo Gerd,
With Selection.Font bezieht sich doch aber auf .AddComment und
nicht auf B2. Wo nimmst du den Zusammenhang her?
Wie gesagt, das Problem habe ich ja, wenn auch nicht schön gelöst.
Das Hauptproblem ist halt das mit den Geburtstagen, dass Sie nur
einmal eingetragen werden und nicht 2x, wenn es das Datum 2x gibt.
Wenn ich irgend wie den Fehler dank der sehr guten Excel-Kenntnisse
dieses Forums finden könnte wäre es sehr schön.
Gruß
Andy
Anzeige
AW: Jeder Geburtstag als Kommentar nur einmal warum?
GerdZ
Hallo Andy,
nach dem Anfügen des Kommentars wird dieser nicht automatisch ausgewählt.
Folgender gekürzter Code sollte Dir meine vorherige Antwort verdeutlichen:
Sub Notiz_Geburtstag()
Dim Alter As Byte
Dim WS1 As Worksheet, WS2 As Worksheet
Dim iZeile As Long, iiZeile As Long
Set WS1 = Worksheets("Dienstplan")
Set WS2 = Worksheets("Geburtstage")
WS1.Range("A1:A65536").ClearComments
For iZeile = 4 To WS2.Range("B65536").End(xlUp).Row
For iiZeile = 2 To WS1.Range("A65536").End(xlUp).Row
If Day(WS1.Cells(iiZeile, 1)) = Day(WS2.Cells(iZeile, 3)) And _
Month(WS1.Cells(iiZeile, 1)) = Month(WS2.Cells(iZeile, 3)) Then
With WS1.Cells(iiZeile, 1)
If .Comment Is Nothing Then
.AddComment "Kommentar"
.Comment.Visible = True
.Comment.Shape.Select
With Selection.Font
End With
With .Comment.Shape
End With
Else
.Comment.Text Text:=.Comment.Text & Chr(10) & "Kommentar"
End If
End With
End If
Next iiZeile
Next iZeile
End Sub
Gruß
Gerd
Anzeige
Warum werden Geburtstage nur 1x eingetragen
28.06.2004 18:15:54
Andy
Hallo,
so richtig kann ich das mit dem Problem selbst, mit dem Eintrag der Geburtstage,
das diese nur 1x eingetragen werden, obwohl das Datum 2x vorhanden ist nicht
zusammen bringen. Ich verstehe nicht, warum nur einmal der Eintrag kommt. Die
Stelle, die dafür zuständig ist muss doch zu finden sein.
Kann mir sonst noch jemand helfen oder mir das näher erklären, was die Vorgänger
meinen, wenn es bei denen um die Behandlung meines Problems geht?
Wäre über weitere klarere Hilfe sehr dankbar, da das sehr wichtig für mich ist.
Gruß
Andy
AW: Warum werden Geburtstage nur 1x eingetragen
GerdZ
Hallo Andy,
der Fehler ist das Exit For.
Du gehst mit der äußeren For-Next (iZeile) durch die Geburtstage. Die innere For-Next (iiZeile) durchläuft den Dienstplan bis zum entsprechenden ersten Datum des Geburtstages, dann verläßt Du mit Exit For diese Schleife, machst den Kommentareintrag und gehst zum nächsten Eintrag (Next iZeile) in der Geburtstagsliste.
Gruß
Gerd
Anzeige
Fehler in Schleife Geburtstage nur 1x eingetragen?
29.06.2004 11:13:53
Andy
Hallo Gerd,
Danke, das du mir bei der Fehlersuche behilflich bist. Wie würdest du
das dann machen? Ich war froh, wo ich das endlich soweit hatte, dass er
überhaupt das so gut anzeigt im Dienstplan.
Gruß
Andy
Danke, hatte was übersehen
29.06.2004 13:19:31
Andy
Hallo Gerd,
danke für deine Hilfe und Geduld. Hatte was bei dir übersehen,
so blieb er immer hängen. Ist immer wieder schön hier im Forum
zu sein und zu sehen, wie man dank großer Hilfen kleine Fehler
findet.
Gruß
Andy
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige