PROBLEMA EM MUDAR A COR DA FONTE DA COLUNA INTEIRA
Tem um instante que o status está na linha vazia<>ABERTO. por isso retorna vermelho, ou seja ele deixa vermelho, antes de preecher a linha pois você está dentro do loop e adicionando uma linha vazia. Somente após sair do loop você retira a linha. Por isso, assim funciona.
[txt-color=#e80000]PORéM:[/txt-color]
Note que você está executando esse código para cada registro inserido na grid. O correto é carregar a grid depois verificar o status. Para isso, mova seu código para o final da sub, logo abaixo do [txt-color=#e80000]LOOP[/txt-color]
Dim Acor As ColorConstants
For X = .FixedRows To .Rows - 1
If .TextMatrix(X, 3) = [Ô]ABERTO[Ô] Then
Acor = vbBlue
ElseIf .TextMatrix(X, 3) = [Ô]FECHADO[Ô] Then
Acor = vbRed
End If
.Col = 3 [ô]a coluna do aberto ou fechado
.Row = X
.CellForeColor = Acor
Next X
[txt-color=#e80000]PORéM:[/txt-color]
Note que você está executando esse código para cada registro inserido na grid. O correto é carregar a grid depois verificar o status. Para isso, mova seu código para o final da sub, logo abaixo do [txt-color=#e80000]LOOP[/txt-color]
RS.MoveNext
.Rows = .Rows + 1
Loop
.Rows = .Rows - 1
Dim Acor As ColorConstants
For X = .FixedRows To .Rows - 1
If .TextMatrix(X, 3) = [Ô]ABERTO[Ô] Then
Acor = vbBlue
Else [ô]If .TextMatrix(X, 3) = [Ô]FECHADO[Ô] Then
Acor = vbRed
End If
.Col = 3 [ô]a coluna do aberto ou fechado
.Row = X
.CellForeColor = Acor
Next X
End With
End Sub
bom estive verificando e achei o problema, na sub FormatarGridFiltros, a verificação ficava dentro do Loop e ela acabava verificando antes mesmoda grid estar preenchida.
Tomei a libertade de dar uma enxugada nesta grid, repare que mudei forma de se criar a grid, a maior mudança est[ô]á no cabeçalho
com apenas uma linha (FormatString) crio o cabeçalho alinho, e determino o nome e a quantidade de colunas.
^ = determinaspalavras fiquem centralizadas: EX: [Ô]^COD OS|^SITUAÇÃO
vc poderia usar < para alinhar a esquerda ou > para alinhar a direita: Ex: >COD_OS|<SiTUAÇÃO
e o Pipe (|) determina a separação das colunas
assim damos uma enxugada no código
Tomei a libertade de dar uma enxugada nesta grid, repare que mudei forma de se criar a grid, a maior mudança est[ô]á no cabeçalho
com apenas uma linha (FormatString) crio o cabeçalho alinho, e determino o nome e a quantidade de colunas.
^ = determinaspalavras fiquem centralizadas: EX: [Ô]^COD OS|^SITUAÇÃO
vc poderia usar < para alinhar a esquerda ou > para alinhar a direita: Ex: >COD_OS|<SiTUAÇÃO
e o Pipe (|) determina a separação das colunas
assim damos uma enxugada no código
Private Sub FormatarGridFiltros()
With Grid
.Rows = 1 [ô]INICIA O GRID COM UMA LINHA
.FixedCols = 0 [ô]DETERMINA QUE NÃO HAJA COLUNA FIXA
[ô]Abaixo o cabeçalho é criado
.FormatString = [Ô]^COD OS|^SITUAÇÃO|^STATUS|^CLIENTE[Ô]
.ColWidth(0) = 0
.ColWidth(1) = 1300
.ColWidth(2) = 1000
.ColWidth(3) = 3700
[ô]colocar os cabeçalho em negrito
Dim X As Integer
For X = 0 To .Cols - 1
.Col = X
.Row = 0
.CellFontBold = True
Next X
Do Until RS.EOF
[ô]A linha abaixo cria mais linha no grid
.Rows = .Rows + 1
[ô]Preenche com os dados, e assim sucessivamente
If Not IsNull(RS!Cod_OS) Then .TextMatrix(.Rows - 1, 0) = RS!Cod_OS
If Not IsNull(RS!var_STATUS) Then .TextMatrix(.Rows - 1, 1) = RS!var_STATUS
If Not IsNull(RS!var_STATUS_OS) Then .TextMatrix(.Rows - 1, 2) = RS!var_STATUS_OS
If Not IsNull(RS!NOME) Then .TextMatrix(.Rows - 1, 3) = RS!NOME
RS.MoveNext
Loop
[ô] agora sim coloco a fução para mudar a cor da coluna e pronto
[ô]mudar a cor da fonte
Dim Acor As ColorConstants
For w = 1 To .Rows - 1
If UCase(Trim(.TextMatrix(w, 2))) = UCase([Ô]ABERTO[Ô]) Then
Acor = vbBlue
Else
Acor = vbRed
End If
.Col = 2 [ô]a coluna do aberto ou fechado
.Row = w
.CellForeColor = Acor
Next w
End With
End Sub
Cara tu é Show!
Obrigado!
Obrigado!
Tópico encerrado , respostas não são mais permitidas