Ms access 在VBA中设置访问颜色代码

Ms access 在VBA中设置访问颜色代码,ms-access,Ms Access,在Access数据库中设置文本框的背景颜色时遇到问题。当某些条件满足时,我想把颜色改成红色 在设计视图中,我已将文本框的back color属性设置为红色,它显示为“#ED1C24”。当我在表单视图中查看表单时,控件正确显示为我选择的红色 但当我将此值放入VBA代码(Text1.Backcolor=“#ED1C24”)时,会出现类型不匹配错误 我尝试将其更改为十六进制数(Text1.Backcolor=&HED1C24),但随后控件变为蓝色 任何帮助都将不胜感激。谢谢。不久前我写了一篇关于这个问

在Access数据库中设置文本框的背景颜色时遇到问题。当某些条件满足时,我想把颜色改成红色

在设计视图中,我已将文本框的back color属性设置为红色,它显示为“#ED1C24”。当我在表单视图中查看表单时,控件正确显示为我选择的红色

但当我将此值放入VBA代码(Text1.Backcolor=“#ED1C24”)时,会出现类型不匹配错误

我尝试将其更改为十六进制数(Text1.Backcolor=&HED1C24),但随后控件变为蓝色


任何帮助都将不胜感激。谢谢。

不久前我写了一篇关于这个问题的博客,应该可以回答你的问题

代码如下:

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
公共函数HTMLColour(HTMLCode作为字符串,可选红色作为变量_
可选绿色作为变体,可选蓝色作为变体)尽可能长
On错误转到HTMLColour\U错误
'将HTML颜色代码编号转换为长整数
'还通过提供的参数返回组成R、G和B组件
Dim intR为整数、intG为整数、intB为整数
作为字符串的Dim strHTML
'条带#前缀(如果提供)
如果Len(HTMLCode)<6,则退出函数
strHTML=右侧(HTMLCode,6)
'提取R、G、B值
intR=CInt(“&H”和Mid(strHTML,1,2))
intG=CInt(“&H”和Mid(strHTML,3,2))
intB=CInt(“&H”和Mid(strHTML,5,2))
'返回可选参数
如果不是IsMissing(红色),则红色=intR
如果不是IsMissing(绿色),则绿色=intG
如果不是IsMissing(蓝色),则蓝色=intB
'将RGB转换为长整数
HTMLColour=RGB(intR、intG、intB)
HTMLColour\u出口:
退出功能
HTMLColor\u错误:
MsgBox错误描述,VBEQUOTE,“函数HTMLColour”
恢复HTMLColour\u退出
端函数

希望这有帮助。

VBA中的颜色代码格式是RGB或Long,而不是十六进制

在您的情况下,最简单的方法是调用将从十六进制转换为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
像这样使用它:

Text1.BackColor = Color_Hex_To_Long("#ED1C24")

对于MS_ACCESS 2016,long值似乎只是.backcolor值,使用上述函数转换十六进制将不起作用

我只需要创建一个文本框和一个标签,在设计视图中根据需要为标签上色,然后在VBA中将文本框的值设置为txtBlue=lblBlue.backcolor


我不确定其他版本的excel中是否存在这种情况,但Office 2016中似乎存在这种情况。

只需使用OnCurrent属性设置字体属性或其他属性即可。
代替输入十六进制颜色代码,更容易使用完全以数字表示的MS Access专有代码。做简单的事。干杯Mikey

欢迎您随时复制指向潜在解决方案的链接,但请确保您的其他用户了解它是什么,以及它为什么存在。始终引用重要链接中最相关的部分,以防无法访问目标站点或永久脱机。考虑到仅仅是一个指向外部站点的链接是一个可能的原因。这对我不起作用(Access 365)-从Access表单属性中显示的十六进制值计算出的整数与手动设置颜色数=>结果中的错误颜色后通过代码读取颜色数得到的整数不同。下面的jhTuppeny解决方案完成了任务。