Seite 1 von 1

Datum überprüfen

Verfasst: Sa, 11.03.2006 14:26
von Hago
Hallo,

ich habe eine Tabelle zu der fast jeden Tag eine neue Zeile mit Einträgen hinzukommt.
Die neue Zeile wird nach Zeile 7 eingefügt und in die erste Zelle wird jeweils das Datum mit date() geschrieben.
Wenn ich eines dieser Datumsfelder anklicke steht da zB '16.02.2006

In unregelmäßigen Abständen fehlt eine solche Tages-Zeile.
Deshalb hätte ich gerne das Makro, das die neue Zeile und das Datum einfügt, dahingehend erweitert, dass es auch überprüft, ob in der Zeile darunter das Datum des Vortages steht - und wenn nicht, den unteren Rand der Datumszelle mit einem ca. 2pt dicken roten Rand versieht.
So wären fehlende Zeilen sofort wahrzunehmen.

Bis jetzt habe ich dies:

Code: Alles auswählen

   oSheet = thisComponent.sheets(1)
   oZelle1 = oSheet.getCellByPosition(7,0)
   oZelle2 = oSheet.getCellByPosition(8,0)
   if oZelle2.date() < (date() - 1) then oZelle1.BottomBorder = com.sun.star.table.BorderLine.Color = "red"
                                         oZelle1.BottomBorder = com.sun.star.table.BorderLine.OuterLineWidth = "100"
Aber schon die if-Zeile funktioniert natürlich nicht - ich krieg nicht raus, wie ich die Überprüfung machen könnte.

Kann mir jemand helfen?

Gruß, Hago

Verfasst: Sa, 11.03.2006 15:57
von ykcim
Hi,

die If Bedingung kann nicht gehen, es gibt bei einer Zell date() nicht.
Du mußt den String abfragen.
Date() -1 geht auch nicht.
Benutze DateDiff.

Code: Alles auswählen

DateDiff("d",ozelle1.string, date())
Damit die Differenz zwischen zwei Tagen berechnt.

Naja, und das in der if-Bedingung geht auch nicht :-)
Versuche es mal damit:

Code: Alles auswählen

   oSheet = thisComponent.sheets(1)
   oZelle1 = oSheet.getCellByPosition(7,0)
   oZelle2 = oSheet.getCellByPosition(8,0)
   xray ozelle1
   diff=DateDiff("d",ozelle1.string, date())
   if diff > 1 then
    Dim myBorder as new com.sun.star.table.BorderLine
    myborder.Color=RGB(255,0,0)
    myborder.OuterLineWidth=100
    ozelle2.BottomBorder=myborder
   end if 
mfg
Michael[/quote]

Verfasst: Sa, 11.03.2006 15:58
von Charly
Hallo Hago!

Bei deinem Befehl getCellByPosition hast du Zeile und Spalte vertauscht.
das Programm konnte dadurch nicht die richtige Zelle finden.

Du sagst in der Vorgabe, dass das aktuelle Datum in Zeile sieben steht. Handelt es sich hier um wirklich um die Zeile 7. Denn für das Programm bedeutet das den Zeilenindex 6.

Dann kann man eine Zelle nicht mit dem Befehl Date auslesen.

Ich habe mal auf die Schnelle einen Code geschrieben, wie ich es machen würde.

Code: Alles auswählen

Sub Datumpruefen()

  Dim Rahmenlinie As New com.sun.star.table.BorderLine
  
  Rahmenlinie.color = RGB(255,0,0)
  Rahmenlinie.OuterLineWidth = 100
   
   oSheet = thisComponent.sheets(0)
   oZelle1 = oSheet.getCellByPosition(0,6)
   oZelle2 = oSheet.getCellByPosition(0,7)
   Datum1 = oZelle1.string
   Datum2 = oZelle2.string
   Diff = CDate(Datum1) - Cdate(Datum2)
   if  Diff > 1 then
   oZelle1.BottomBorder = Rahmenlinie
   end if
   
End Sub

Gruß
Charly

Verfasst: Sa, 11.03.2006 16:40
von Charly
Hallo!

Das über Zeile 7 gesagte hat sich erledigt. Ich habe erst jetzt gelesen, dass du "von einfügen nach Zeile 7" geschrieben hast und nicht von der Zeile 7 selbst.

Gruß
Charly.

Verfasst: Sa, 11.03.2006 16:49
von Hago
Toll,

vielen Dank Euch beiden - es klappt.
Inzwischen war ich schon ein wenig weiter.
Das mit den falsch benanntenZellen habe ich entdeckt. In Wirklichkeit sind es die Zellen (0,7) und (0,8)
Jetzt sieht es so aus:

Code: Alles auswählen

sub RoteLinieBeiAusfall
   oSheet = thisComponent.sheets(1)
   oZelle1 = oSheet.getCellByPosition(0,7)
   oZelle2 = oSheet.getCellByPosition(0,8)
   Dim oRandRot as new com.sun.star.table.BorderLine
   With oRandRot
        .Color = rgb(255,0,0)
        .OuterLineWidth = 100
   End with
   Dim oRand as new com.sun.star.table.TableBorder
   With oRand
        .BottomLine = oRandRot
        .isBottomLineValid = True
   End with 
   Datum1 = oZelle1.string 
   Datum2 = oZelle2.string 
   Diff = CDate(Datum1) - Cdate(Datum2) 
   if  Diff > 1 then  oZelle1.TableBorder = oRand
end sub
Gruß, Hago