Изменение значка Excel не работает при открытии другой книги
Я использую следующий код, который приятно меняет значок 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
1 ответ
Я предполагаю, что проблема связана с тем, что в Excel запущено несколько процессов, а вы устанавливаете только значок для текущего окна. Вместо того, чтобы просто вызывать GetActiveWindow32(), вы должны попытаться получить список всех процессов с именем EXCEL.EXE, а затем изменить значок для всех из них, используя SendMessage32, на соответствующий дескриптор.