【问题标题】:Changing Excel Icon doesn't work when another workbook is opened打开另一个工作簿时更改 Excel 图标不起作用
【发布时间】:2012-03-03 19:58:12
【问题描述】:

我正在使用以下代码,它很好地将 Excel 图标更改为我自己的图标。

只要我自己打开工作簿,它就可以完美地工作,但是一旦另一个工作簿已经打开,代码似乎不再有任何效果。 它仅在 Excel 完全关闭时才有效,然后我用代码打开工作簿。 一旦我打开另一个工作簿,从一个工作簿更改为另一个工作簿,等等,它就不再起作用了。

我使用的是 Windows 7、Excel 2007。

我希望有人可以提供帮助。 谢谢

Private Sub Workbook_Open()    
    changeXLIcon "D:/myBOOK/IQS.ico"
End Sub

Private Sub Workbook_WindowActivate(ByVal Wn As Window)
    changeXLIcon "D:/myBOOK/IQS.ico"
End Sub

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
    changeXLIcon "Excel.exe"
End Sub


Declare Function GetActiveWindow32 Lib "USER32" Alias "GetActiveWindow" () As Integer
Declare Function SendMessage32 Lib "USER32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function ExtractIcon32 Lib "SHELL32.DLL" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long

Public Sub changeXLIcon(iconname As String)

    Dim Icon&


    Icon = ExtractIcon32(0, iconname, 0)
    SendMessage32 GetActiveWindow32(), &H80, 1, Icon '< 1 = big Icon
    SendMessage32 GetActiveWindow32(), &H80, 0, Icon '< 0 = small Icon


End Sub

【问题讨论】:

    标签: excel vba icons


    【解决方案1】:

    我猜问题源于 Excel 运行了多个进程,而您只设置了当前窗口的图标。除了调用 GetActiveWindow32() 之外,您还应该尝试检索名为 EXCEL.EXE 的所有进程的列表,然后使用 SendMessage32 将所有进程上的图标更改为各自的句柄。

    【讨论】:

    • 您好,感谢您的帮助。我刚刚花了一个小时试图做你提到的事情,但恐怕我的 VBA 知识并不那么先进。我查看了互联网,但在几个例子之后,我尝试过的所有方法都没有奏效......你能更具体一点吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多