打开另一个工作簿时,更改Excel图标无效

打开另一个工作簿时,更改Excel图标无效,excel,vba,icons,Excel,Vba,Icons,我正在使用下面的代码,它很好地将Excel图标更改为我自己的图标 只要我自己打开工作簿,它就可以很好地工作,但是一旦打开了另一个工作簿,代码似乎不再有任何效果。 只有当Excel完全关闭时,它才能工作,然后我用代码打开工作簿。 一旦我打开另一个工作簿,从一个工作簿切换到另一个工作簿,它就不再工作了 我使用的是Windows7,Excel2007 我希望有人能帮忙。 谢谢 我猜问题是因为Excel运行了几个进程,而您只为当前窗口设置了图标。您不应该只调用GetActiveWindow32,而应该尝

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

只要我自己打开工作簿,它就可以很好地工作,但是一旦打开了另一个工作簿,代码似乎不再有任何效果。 只有当Excel完全关闭时,它才能工作,然后我用代码打开工作簿。 一旦我打开另一个工作簿,从一个工作簿切换到另一个工作簿,它就不再工作了

我使用的是Windows7,Excel2007

我希望有人能帮忙。 谢谢


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

您好,感谢您的帮助。我刚刚花了最后一个小时试着做你提到的事情,但恐怕我的VBA知识并没有那么先进。我在网上查了一下,但是,举了几个例子之后,我试过的都没用……你能不能说得更具体一些?
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