为什么即使我更新为在64位系统上使用,此代码也无法正常工作?

时间:2019-01-24 18:53:47

标签: excel vba 32bit-64bit

我正在使用.vbs脚本打开.xlsm文件,以避免出现Excel启动画面(这是弹出的小方块,显示Excel正在加载)。 .vbs脚本还隐藏了工具栏功能区,并将Excel 2016置于全屏状态,但是引入了令人讨厌的标题栏,该标题栏在文件名之后包含一个迷你Excel图标和一个“-Excel”后缀。找到了适用于我的32位Excel的代码。我需要在我的工作笔记本电脑上使用它,但是它具有64位Excel。我在声明中添加了PtrSafe,但是更改图标的代码似乎没有任何作用。

以下代码是更改图标的原始代码。由于我尝试在公司笔记本电脑上的64位Excel上使用该代码,因此必须在Module 1代码中的声明和函数之间添加PtrSafe。 编辑:因此,在进一步研究中,我发现使用长数据类型调用Windows API时,需要长时间更新。因此,应将它们从Long更改为LongPtr或LongLong。我都尝试过,现在它告诉我Sub ChangeApplicationIcon()中的ExtractIcon32类型不匹配。我已经更改了Long(8)的每个实例。 EDIT2 :BigBen指出Icon&的意思是Icon As Long。因此,我实现了将Icon&更改为“ Icon As LongPtr”的修改。该代码运行没有错误,但仍然不会更改图标。 EDIT3:我已经在我的个人游戏台式机上尝试了64位版本excel的修复,但是图标仍然没有改变。因此,可能不是因为我公司的笔记本电脑受到任何可能的限制。

'******CODE FOR THISWORKBOOK MODULE****    
Option Explicit

Private Sub Workbook_Open()
    Application.Caption = " - Company Name "
    ChangeApplicationIcon
End Sub
 '*****************************************

 '************CODE FOR MODULE1*************

Option Explicit

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


 'modification of code from Excel Experts E-Letter Archives.
 'Original code By Jim Rech can be found by following this
 'link > [removed link to avoid rule-breaking]


Sub ChangeApplicationIcon()

    Dim Icon&

     '*****Change Icon To Suit*******
    Const NewIcon$ = "Notepad.exe"
     '*****************************

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

End Sub
 '*****************************************

执行此代码后,应将全屏Excel的标题栏图标从Excel 2016图标更改为“记事本”图标。

0 个答案:

没有答案