2012-03-03 8 views
0

次のコードを使用しています。Excelアイコンを自分のアイコンに変更しています。別のブックを開いたときにExcelアイコンを変更できない

私はそれだけでブックを開く限り完全に動作しますが、別のブックが既に開かれるとすぐに、コードはそれ以上効果がないようです。 これは、Excelが完全に閉じられている場合にのみ機能し、ブックでコードを開きます。 別のブックを開いたり、あるブックから別のブックに変更したりするとすぐに機能しなくなります。

私は私が誰かを助けることを願ってのWindows 7、エクセル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

私は問題がいくつかのプロセスだけ現在のウィンドウのアイコンを設定しながらランニングを持つエクセルに由来することを推測すると思います。 GetActiveWindow32()を呼び出す代わりに、EXCEL.EXEという名前のすべてのプロセスのリストを取得し、SendMessage32を使用してそれらのすべてのアイコンをそれぞれのハンドルに変更する必要があります。

+0

こんにちは、助けてくれてありがとう。私はちょうどあなたが言及したことをしようとする最後の時間を過ごしたが、私はそれが高度ではない私のVBAの知識を恐れている。私はインターネットを見ましたが、いくつかの例の後、私が試したすべてがうまくいかなかったのです...もっと具体的になればいいのですか? – user1135218

関連する問題