VB6.0 Kolory w MSHFlexGrid

Witam,

Zastanawiam sie czy jesteście w stanie pomóc mi z modyfikacją kodu w VB6.0 z która męcze się już od tygodnia

Posiadam ponizszy kod i staram się go przerobić na moje potrzeby aby na podstawie konkretnej celi w kolumnie kod sprawdzał mi i zaznaczał cały wiersz w określonym kolorze jeśli data systemowa zgadza sie z data z tej konkretnej celi i wiersz został zaznaczony w jakimś kolorze, jeśli został jeden dzień zaznaczał jeszcze w innym kolorze, jeśli dwa dni jeszcze w innym kolorze jeśli data minela już to w kolejenym kolorze. I tak do końca wszystkich wierszy w tej kolumnie. W bazie accessa kolumna nazywa się Przeglad_wazny_do i zajmuje 3 miejsce.Czekam na jakieś podpowiedzi w czym mogę robić błąd, zaznaczam jeszcze że jestem początkujący w VB

Pozdrawiam wszystkich.

For i = 1 To N

MSHFlexGrid1.Row = i

MSHFlexGrid1.Col = 0

MSHFlexGrid1.Col = 1

MSHFlexGrid1.Text = rs!Przeglad_wazny_do

If rs!Przeglad_wazny_do < Date Then

MSHFlexGrid1.CellBackColor = &H8080FF

ElseIf Day(rs!Przeglad_wazny_do) = Day(Now()) And _

Month(rs!Przeglad_wazny_do) = Month(Now()) And _

Year(rs!Przeglad_wazny_do) = Year(Now()) Then

MSHFlexGrid1.CellBackColor = &HFFFF&

ElseIf Day(rs!Przeglad_wazny_do) = Day(Now()) + 1 And _

Month(rs!Przeglad_wazny_do) = Month(Now()) And _

Year(rs!Przeglad_wazny_do) = Year(Now()) Then

MSHFlexGrid1.CellBackColor = &H80FF80

ElseIf Day(rs!Przeglad_wazny_do) = Day(Now()) + 2 And _

Month(rs!Przeglad_wazny_do) = Month(Now()) And _

Year(rs!Przeglad_wazny_do) = Year(Now()) Then

MSHFlexGrid1.CellBackColor = &HC0FFC0

Else

MSHFlexGrid1.CellBackColor = &H80000005

End If

rs.MoveNext

Next i

rs.Close

Set objRst = Nothing

O ile dobrze zrozumiałem, to chodzi ci tylko o to aby w danym kolorze zaznaczony był cały wiersz, a nie tylko jedna komórka.

Aby zaznaczony był cały wiersz w danym kolorze wystarczy utworzyć dodatkową pętlę tam gdzie ustawiasz kolor.

i podobnie w innych przypadkach.

Z tymi warunkami do spełnienia też jest coś nie tak w przypadku gdy mamy nowy miesiąc, a data przeglądu jest z poprzedniego miesiąca.

Ja bym to zrobił np. tak (uwzględniając, że daty w Windowsie mogą być prezentowane w różnych formatach):

Jeżeli np. rs!Przeglad_wazny_do jest np. w formacie “2013-08-01” to i w takim samym formacie tworzę aktualną datę i obliczam różnicę między tymi datami. Oczywiście program będzie działał poprawnie jeżeli zmienna rs!Przeglad_wazny_do jest w formacie daty, a jeżeli jest to zmienna tekstowa, to trzeba ją przekształcić do formatu daty.

Oki dziekuję Ci bardzo za odpowiedź na moje pytanie,będę to sprawdzał w razie pytań będę jeszcze pisał.

Pozdrawiam

Dodane 30.07.2013 (Wt) 19:36

A jednak mam pytanie dotyczące ustawiania dat.

W bazie accessa ustawiłem format daty krótkiej bo wcześniej miałem jako tekst,format jaki mi sie pokazuje to 2013-07-30 (czyli poprawny) natomiast jeśli zaciągam do MSHFLEXGRIDA to format daty jaki mi sie pojawia to 7/30/2013 czyli totalnie nie tak jak być powinno, czy coś źle ustawiłem w bazie czy za pomocą kodu vb musze zmienić sposób przedstawiania daty mshflexgrid ??

Może ustaw format daty długiej w accessie to być może formaty będą identyczne.

Sprawdziłem, że jeżeli zadeklaruje się w VB zmienną w formacie daty

Dim data0 as date

i jeżeli podamy data0 = “8/01/2013”

to automatycznie zmienna ta przyjmuje wartość “2013-08-01” czyli wartość długą jak w systemie, a różnica między aktualną datą i i zminną Data0 będzie na dziś równa 2.

Możesz sprawdzić wpisując: roznica=date0-date

Można też sprowadzić tę datę krótką do długiej:

data0 = Format(Year(rs!Przeglad_wazny_do), “0000”) & “-” & Format(Month(rs!Przeglad_wazny_do), “00”) & “-” & Format(Day(rs!Przeglad_wazny_do), “00”)

ale chyba jest to zbyteczne. Poeksperymentuj.

Dzieki :slight_smile: będę dzisiaj eksperymentował w nocy :), napisze jakie wyszły mi rezultaty .

Pozdrawiam

Dodane 31.07.2013 (Śr) 2:17

Zmieniałem formaty daty w access i nie przynosiło to żadnych rezultatów,

wrzuciłem taki kod

Dim i As Integer

With MSHFlexGrid1

For i = 1 To .Rows - 1

.TextMatrix(i, 2) = Format(.TextMatrix(i, 2), “yyyy/mm/dd”)

Next i

End With

Daty zostały zamienione na takie jak potrzebowałem, natomiast kod od Ciebie z kolorowaniem wierszy nie działał poradziłem sobie częściowo

For i = 1 To MSHFlexGrid1.Rows - 1

MSHFlexGrid1.Row = i

If MSHFlexGrid1.TextMatrix(i, 2) = Date Then

For intCols = 0 To MSHFlexGrid1.Cols - 1

MSHFlexGrid1.Col = intCols

MSHFlexGrid1.CellBackColor = &H80FF80

Next intCols

End If

Next i

For i = 1 To MSHFlexGrid1.Rows - 1

MSHFlexGrid1.Row = i

If MSHFlexGrid1.TextMatrix(i, 2) < Date Then

For intCols = 0 To MSHFlexGrid1.Cols - 1

MSHFlexGrid1.Col = intCols

MSHFlexGrid1.CellBackColor = &H8080FF

Next intCols

End If

ale w dalszym ciągu zostają jeszcze dwie zmienne dla 1 dnia i dla 2 dni który nie wiem jak ugryźć, masz jakieś pomysły??

Pozdrawiam

Dzięki wielkie za cenną podpowiedź (odpowiedź) :slight_smile: problem rozwiązany :slight_smile:

Pozdrawiam