Que define os códigos de cores de acesso na VBA

Estou a ter problemas em definir a cor de uma caixa de texto na minha base de dados de acesso. Quero mudar a cor para vermelho quando certas condições forem cumpridas.

na área de design, configurei a propriedade de cores anteriores da caixa de texto para vermelho e é mostrada como'#ED1C24'. Quando eu vejo a forma na forma ver o controle é mostrado corretamente na cor vermelha que eu escolhi.

mas quando pus este valor no meu código VBA (texto 1.Backcolor = "#ED1C24") I get a type mismatch error.

tentei mudá-lo para um número hexadecimal (texto 1.Backcolor = & HED1C24) mas então o controle fica azul.

Qualquer ajuda seria apreciada. Obrigado.

 3
Author: Steve Jones, 2016-11-14

4 answers

O formato de código de cores em VBA é RGB ou longo, e não HEX

No teu caso, a maneira mais fácil é chamar uma função que se converta de HEX para Long:

Public Function Color_Hex_To_Long(strColor As String) As Long
    Dim iRed As Integer
    Dim iGreen As Integer
    Dim iBlue As Integer

    strColor = Replace(strColor, "#", "")
    strColor = Right("000000" & strColor, 6)
    iBlue = Val("&H" & Mid(strColor, 1, 2))
    iGreen = Val("&H" & Mid(strColor, 3, 2))
    iRed = Val("&H" & Mid(strColor, 5, 2))

    Color_Hex_To_Long = RGB(iRed, iGreen, iBlue)
End Function

Usa-o assim:

Text1.BackColor = Color_Hex_To_Long("#ED1C24")
 1
Author: Thomas G, 2016-11-14 12:30:07
Escrevi um blog sobre este problema há algum tempo, que deve responder à sua pergunta.

Http://www.jht.co.uk/access-colour-color-codes/

Aqui está o código:

Public Function HTMLColour(HTMLCode As String, Optional Red As Variant, _
Optional Green As Variant, Optional Blue As Variant) As Long
On Error GoTo HTMLColour_Error

'Converts an HTML colour code number to a long interger
'Also returns the constituent R,G & B components through supplied parameters

Dim intR As Integer, intG As Integer, intB As Integer
Dim strHTML As String

'Strip # prefix if supplied
If Len(HTMLCode) < 6 Then Exit Function
strHTML = Right(HTMLCode, 6)

'Extract R, G, B values
intR = CInt("&H" & Mid(strHTML, 1, 2))
intG = CInt("&H" & Mid(strHTML, 3, 2))
intB = CInt("&H" & Mid(strHTML, 5, 2))

'Return optional parameters
If Not IsMissing(Red) Then Red = intR
If Not IsMissing(Green) Then Green = intG
If Not IsMissing(Blue) Then Blue = intB

'Convert RGB to Long integer
HTMLColour = RGB(intR, intG, intB)

HTMLColour_Exit:
Exit Function

HTMLColour_Error:
MsgBox Err.Description, vbExclamation, "Function HTMLColour"
Resume HTMLColour_Exit
End Function
Espero que isto ajude.
 3
Author: jhTuppeny, 2020-03-29 10:11:17

Basta usar propriedades OnCurrent para definir as suas propriedades da fonte ou outras propriedades. Em vez de introduzir os códigos de cor Hex, mais fácil de usar os códigos proprietários de acesso MS que estão inteiramente em números. Faz o caminho fácil. Saúde! Mikey

 1
Author: Shananarocks, 2020-03-26 01:55:54

Para MS_ACCESS 2016 o valor longo parece ser apenas o .valor backcolor, converter o HEX usando as funções acima não vai funcionar.

Eu criaria apenas uma caixa de texto e uma etiqueta, coloriria a etiqueta como desejar na área de design e configuraria o valor da caixa de texto para txtBlue = lblBlue.backcolour em VBA.

Não tenho a certeza se este é o caso em outras versões do excel, mas parece ser o caso no Office 2016.

 0
Author: LeasMaps, 2018-05-25 06:44:06