PROBLEMA EM MUDAR A COR DA FONTE DA COLUNA INTEIRA
tenho o seguinte código:
resumo: na coluna 3 se tiver o texto ABERTO ele deixa a fonte azul e se for FECHADO ele deixa vermelho.
o problema está somente na ultima linha, ou seja... ela sempre eh vermelha... nao importa o texto da celula, ela sempre fica vermelha
onde tah o erro?
[ô]mudar a cor da fonte da coluna 3
Dim Acor As ColorConstants
Dim c As Integer
For c = .FixedRows To .Rows - 1
If .TextMatrix(c, 3) = [Ô]ABERTO[Ô] Then
Acor = vbBlue
Else
Acor = vbRed
End If
.Col = 3 [ô]a coluna do aberto ou fechado
.Row = c: .CellForeColor = Acor
Next c
resumo: na coluna 3 se tiver o texto ABERTO ele deixa a fonte azul e se for FECHADO ele deixa vermelho.
o problema está somente na ultima linha, ou seja... ela sempre eh vermelha... nao importa o texto da celula, ela sempre fica vermelha
onde tah o erro?
vc ja tentou colocar um TRIM pra ver se não tem espaços?
Dim Acor As ColorConstants
Dim c As Integer
For c = .FixedRows To .Rows - 1
If ucase(trim(.TextMatrix(c, 3))) = [Ô]ABERTO[Ô] Then
Acor = vbBlue
Else
Acor = vbRed
End If
.Col = 3 [ô]a coluna do aberto ou fechado
.Row = c: .CellForeColor = Acor
Next c
Dim Acor As ColorConstants
Dim c As Integer
For c = .FixedRows To .Rows - 1
If ucase(trim(.TextMatrix(c, 3))) = [Ô]ABERTO[Ô] Then
Acor = vbBlue
Else
Acor = vbRed
End If
.Col = 3 [ô]a coluna do aberto ou fechado
.Row = c: .CellForeColor = Acor
Next c
em outro tópico vc passou o seguinte código:
Private Sub FormatarGridFiltros()
With Grid
.Clear
.Cols = 5
.Rows = 2
.ColWidth(0) = 0
.ColWidth(1) = 0
.ColWidth(2) = 1300
.ColWidth(3) = 1000
.ColWidth(4) = 3700
.TextMatrix(0, 1) = [Ô]COD_OS[Ô]
.TextMatrix(0, 2) = [Ô]SITUAÇÃO[Ô]
.TextMatrix(0, 3) = [Ô]STATUS[Ô]
.TextMatrix(0, 4) = [Ô]CLIENTE[Ô]
[ô]colocar os cabeçalho em negrito
Dim X As Integer
For X = 0 To .Cols - 1
.Col = X
.Row = 0
.CellFontBold = True
Next X
[ô]centralizar o titulo
Dim f As Integer
For f = 0 To .Cols - 1
.Row = 0
.Col = f
.CellAlignment = flexAlignCenterCenter
Next f
Do Until RS.EOF
[ô]mudar a cor da coluna
Dim i As Integer
For i = 1 To .Rows - 1
.Row = i
.Col = 2: .CellBackColor = &HC0FFFF
Next
Grid.Redraw = False
[ô]mudar a cor da fonte
Dim Acor As ColorConstants
For X = .FixedRows To .Rows - 1
If .TextMatrix(X, 3) = [Ô]ABERTO[Ô] Then
Acor = vbBlue
Else
Acor = vbRed
End If
.Col = 3 [ô]a coluna do aberto ou fechado
.Row = X
.CellForeColor = Acor
Next X
Grid.Redraw = True
If Not IsNull(RS!Cod_OS) Then .TextMatrix(.Rows - 1, 1) = RS!Cod_OS
If Not IsNull(RS!var_STATUS) Then .TextMatrix(.Rows - 1, 2) = RS!var_STATUS
If Not IsNull(RS!var_STATUS_OS) Then .TextMatrix(.Rows - 1, 3) = RS!var_STATUS_OS
If Not IsNull(RS!NOME) Then .TextMatrix(.Rows - 1, 4) = RS!NOME
RS.MoveNext
.Rows = .Rows + 1
Loop
.Rows = .Rows - 1
End With
End Sub
eu percebi que vc ta [Ô]zebrando[Ô] as colunas enquando preenche a grid,
eu particularmente não preencho a grid desse jeito, acho mais simples ligar a grid à tabela de consulta, assim:
Set MSS.Recordset = RS , antes de tudo
se vc não quer fazer desse jeito, faz o seguinte, preenche primeiro toda a grid, e depois vc formata ela do jeito que vc quer,
mais ou menos assim:
Private Sub FormatarGridFiltros()
With Grid
Do Until RS.EOF
If Not IsNull(RS!Cod_OS) Then .TextMatrix(.Rows - 1, 1) = RS!Cod_OS
If Not IsNull(RS!var_STATUS) Then .TextMatrix(.Rows - 1, 2) = RS!var_STATUS
If Not IsNull(RS!var_STATUS_OS) Then .TextMatrix(.Rows - 1, 3) = RS!var_STATUS_OS
If Not IsNull(RS!NOME) Then .TextMatrix(.Rows - 1, 4) = RS!NOME
RS.MoveNext
.Rows = .Rows +
Loop
Grid.Redraw = False
.Clear
.Cols = 5
.Rows = 2
.ColWidth(0) = 0
.ColWidth(1) = 0
.ColWidth(2) = 1300
.ColWidth(3) = 1000
.ColWidth(4) = 3700
.TextMatrix(0, 1) = [Ô]COD_OS[Ô]
.TextMatrix(0, 2) = [Ô]SITUAÇÃO[Ô]
.TextMatrix(0, 3) = [Ô]STATUS[Ô]
.TextMatrix(0, 4) = [Ô]CLIENTE[Ô]
[ô]colocar os cabeçalho em negrito
Dim X As Integer
For X = 0 To .Cols - 1
.Col = X
.Row = 0
.CellFontBold = True
Next X
[ô]centralizar o titulo
Dim f As Integer
For f = 0 To .Cols - 1
.Row = 0
.Col = f
.CellAlignment = flexAlignCenterCenter
Next f
[ô]mudar a cor da coluna
Dim i As Integer
For i = 1 To .Rows - 1
.Row = i
.Col = 2: .CellBackColor = &HC0FFFF
Next
[ô]mudar a cor da fonte
Dim Acor As ColorConstants
For X = .FixedRows To .Rows - 1
If .TextMatrix(X, 3) = [Ô]ABERTO[Ô] Then
Acor = vbBlue
Else
Acor = vbRed
End If
.Col = 3 [ô]a coluna do aberto ou fechado
.Row = X
.CellForeColor = Acor
Next X
Grid.Redraw = True
End With
End Sub
isso ta cheio de erros, mas pelo enos siga esse raciocinio....flow
Private Sub FormatarGridFiltros()
With Grid
.Clear
.Cols = 5
.Rows = 2
.ColWidth(0) = 0
.ColWidth(1) = 0
.ColWidth(2) = 1300
.ColWidth(3) = 1000
.ColWidth(4) = 3700
.TextMatrix(0, 1) = [Ô]COD_OS[Ô]
.TextMatrix(0, 2) = [Ô]SITUAÇÃO[Ô]
.TextMatrix(0, 3) = [Ô]STATUS[Ô]
.TextMatrix(0, 4) = [Ô]CLIENTE[Ô]
[ô]colocar os cabeçalho em negrito
Dim X As Integer
For X = 0 To .Cols - 1
.Col = X
.Row = 0
.CellFontBold = True
Next X
[ô]centralizar o titulo
Dim f As Integer
For f = 0 To .Cols - 1
.Row = 0
.Col = f
.CellAlignment = flexAlignCenterCenter
Next f
Do Until RS.EOF
[ô]mudar a cor da coluna
Dim i As Integer
For i = 1 To .Rows - 1
.Row = i
.Col = 2: .CellBackColor = &HC0FFFF
Next
Grid.Redraw = False
[ô]mudar a cor da fonte
Dim Acor As ColorConstants
For X = .FixedRows To .Rows - 1
If .TextMatrix(X, 3) = [Ô]ABERTO[Ô] Then
Acor = vbBlue
Else
Acor = vbRed
End If
.Col = 3 [ô]a coluna do aberto ou fechado
.Row = X
.CellForeColor = Acor
Next X
Grid.Redraw = True
If Not IsNull(RS!Cod_OS) Then .TextMatrix(.Rows - 1, 1) = RS!Cod_OS
If Not IsNull(RS!var_STATUS) Then .TextMatrix(.Rows - 1, 2) = RS!var_STATUS
If Not IsNull(RS!var_STATUS_OS) Then .TextMatrix(.Rows - 1, 3) = RS!var_STATUS_OS
If Not IsNull(RS!NOME) Then .TextMatrix(.Rows - 1, 4) = RS!NOME
RS.MoveNext
.Rows = .Rows + 1
Loop
.Rows = .Rows - 1
End With
End Sub
eu percebi que vc ta [Ô]zebrando[Ô] as colunas enquando preenche a grid,
eu particularmente não preencho a grid desse jeito, acho mais simples ligar a grid à tabela de consulta, assim:
Set MSS.Recordset = RS , antes de tudo
se vc não quer fazer desse jeito, faz o seguinte, preenche primeiro toda a grid, e depois vc formata ela do jeito que vc quer,
mais ou menos assim:
Private Sub FormatarGridFiltros()
With Grid
Do Until RS.EOF
If Not IsNull(RS!Cod_OS) Then .TextMatrix(.Rows - 1, 1) = RS!Cod_OS
If Not IsNull(RS!var_STATUS) Then .TextMatrix(.Rows - 1, 2) = RS!var_STATUS
If Not IsNull(RS!var_STATUS_OS) Then .TextMatrix(.Rows - 1, 3) = RS!var_STATUS_OS
If Not IsNull(RS!NOME) Then .TextMatrix(.Rows - 1, 4) = RS!NOME
RS.MoveNext
.Rows = .Rows +
Loop
Grid.Redraw = False
.Clear
.Cols = 5
.Rows = 2
.ColWidth(0) = 0
.ColWidth(1) = 0
.ColWidth(2) = 1300
.ColWidth(3) = 1000
.ColWidth(4) = 3700
.TextMatrix(0, 1) = [Ô]COD_OS[Ô]
.TextMatrix(0, 2) = [Ô]SITUAÇÃO[Ô]
.TextMatrix(0, 3) = [Ô]STATUS[Ô]
.TextMatrix(0, 4) = [Ô]CLIENTE[Ô]
[ô]colocar os cabeçalho em negrito
Dim X As Integer
For X = 0 To .Cols - 1
.Col = X
.Row = 0
.CellFontBold = True
Next X
[ô]centralizar o titulo
Dim f As Integer
For f = 0 To .Cols - 1
.Row = 0
.Col = f
.CellAlignment = flexAlignCenterCenter
Next f
[ô]mudar a cor da coluna
Dim i As Integer
For i = 1 To .Rows - 1
.Row = i
.Col = 2: .CellBackColor = &HC0FFFF
Next
[ô]mudar a cor da fonte
Dim Acor As ColorConstants
For X = .FixedRows To .Rows - 1
If .TextMatrix(X, 3) = [Ô]ABERTO[Ô] Then
Acor = vbBlue
Else
Acor = vbRed
End If
.Col = 3 [ô]a coluna do aberto ou fechado
.Row = X
.CellForeColor = Acor
Next X
Grid.Redraw = True
End With
End Sub
isso ta cheio de erros, mas pelo enos siga esse raciocinio....flow
baseado na sua explicação vc tah usando os comandos
.Clear
.Cols = 5
.Rows = 2
somente após preencher os campos, sendo assim... dará erro!
.Clear
.Cols = 5
.Rows = 2
somente após preencher os campos, sendo assim... dará erro!
alguem tem algum ideia?
Posta um projeto como exemplo.
Estava viajando!
Segue anexo o projeto com o form que está dando o erro mencionado!
ERRO: sempre o ultimo do grid aparece com a fonte vermelha, independente se é ABERTO ou FECHADO.
Segue anexo o projeto com o form que está dando o erro mencionado!
ERRO: sempre o ultimo do grid aparece com a fonte vermelha, independente se é ABERTO ou FECHADO.
TENTA ISTO
Dim Acor As ColorConstants
Dim c As Integer
For c = .FixedRows To .Rows - 1
If .TextMatrix(c, 3) = [Ô]ABERTO[Ô] Then
Acor = vbBlue
.Col = 3 [ô]a coluna do aberto ou fechado
.Row = c
.CellForeColor = Acor
Else
Acor = vbRed
.Col = 3 [ô]a coluna do aberto ou fechado
.Row = c
.CellForeColor = Acor
End If
Next c
fiz conforme falou:
o ultimo continua em vermelhor, mesmo sendo ABERTO.
[txt-color=#e80000]OBS: estou anexando novamente o mesmo projeto com 10 registros gerados para maior exemplo.[/txt-color]
Dim Acor As ColorConstants
Dim c As Integer
For c = .FixedRows To .Rows - 1
If .TextMatrix(c, 3) = [Ô]ABERTO[Ô] Then
Acor = vbBlue
.Col = 3 [ô]a coluna do aberto ou fechado
.Row = c
.CellForeColor = Acor
Else
Acor = vbRed
.Col = 3 [ô]a coluna do aberto ou fechado
.Row = c
.CellForeColor = Acor
End If
Next c
o ultimo continua em vermelhor, mesmo sendo ABERTO.
[txt-color=#e80000]OBS: estou anexando novamente o mesmo projeto com 10 registros gerados para maior exemplo.[/txt-color]
quantas linha fixas vc possui?
por que não inicia o for em 1
a palavra na ultima linha está exatamente como a buscada ou seja todas letras maiusculas
por que não inicia o for em 1
a palavra na ultima linha está exatamente como a buscada ou seja todas letras maiusculas
fixa somente 1... a do cabeçalho
a palavra está do mesmo jeito das outra acima dela... ou seja, [Ô]ABERTO[Ô]
a palavra está do mesmo jeito das outra acima dela... ou seja, [Ô]ABERTO[Ô]
Tópico encerrado , respostas não são mais permitidas