更改Excel状态栏的背景颜色

时间:2020-05-09 11:55:02

标签: excel vba statusbar

我正在使用Excel 2016(Office Theme:Colorful),不幸的是,当我编写一些带有用户定义的文本以在状态栏中显示的代码时,状态栏将其背景颜色更改为深绿色,而不是保留在vbButtonFace(&H8000000F )。结果是一条不可读的状态栏文本消息,认为字体颜色仍为预期的深灰色。

我知道VBA无法直接完成此操作(请不要向我建议更改Office主题...这不是一个选择!)

在Google上搜索时,发现一些使用API​​函数SendMessageGetSysColor调用的代码,如下所示:

#If VBA7 Then
    Public Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr
    Public Declare PtrSafe Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
#Else
    Public Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Public Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
#End If

Private Const CCM_FIRST As Long = &H2000                    'Common Control Messages
Private Const CCM_SETBKCOLOR As Long = (CCM_FIRST + 1)
Private Const PBM_SETBKCOLOR As Long = CCM_SETBKCOLOR       'Progress Bar Messages

Private Const COLOR_BTNFACE = &H8000000F

#If VBA7 Then
    Public Sub SetStatusBackColour(hwndStatBar As LongPtr, ByVal clrref As Long)
        Call SendMessage(hwndStatBar, PBM_SETBKCOLOR, 0&, ByVal clrref)
    End Sub
#Else
    Public Sub SetStatusBackColour(hwndStatBar As Long, ByVal clrref As Long)
        Call SendMessage(hwndStatBar, PBM_SETBKCOLOR, 0&, ByVal clrref)
    End Sub
#End If

Public Function EvalCol(ByVal inCol As Long) As Long        ' Returns the RGB of a long colour value (System colour aware)
    If ((inCol And &HFFFFFF00) = &H80000000) Then EvalCol = GetSysColor(inCol And &HFF) Else EvalCol = inCol
End Function

Private Sub Test()
    Call SetStatusBackColour(StatusBar1.hwnd, EvalCol(vbButtonFace))
    'Call SetStatusBackColour(StatusBar1.hwnd, COLOR_BTNFACE)       'without GetSysColor API function call
End Sub

现在的问题是...如何找到Excel状态栏的目录?

很显然,如果此方法不再适用,或者可以使用其他方法,请告诉我没有任何问题!!!

任何帮助将不胜感激

0 个答案:

没有答案