2012-03-03 55 views
0

我使用下面的代碼,它很好地將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 

回答

0

我猜的問題從Excel莖有幾個進程在運行,而你只設置當前窗口的圖標。您應該嘗試檢索名爲EXCEL.EXE的所有進程的列表,而不是僅調用GetActiveWindow32(),然後使用SendMessage32將它們全部更改爲各自的句柄。

+0

嗨,感謝您的幫助。我剛剛花了最後一小時試圖做你提到的,但我擔心我的VBA知識並不那麼先進。我看了一下互聯網,但是經過幾個例子,我所嘗試過的所有東西都沒有工作......你能不能更具體一些? – user1135218 2012-03-03 22:05:24

相關問題