首页 > 解决方案 > 为什么即使在我更新以在 64 位系统上使用后,此代码也无法运行?

问题描述

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

下面的代码是更改图标的原始代码。由于我尝试在公司笔记本电脑上使用 64 位 Excel 上的代码,因此我不得不在模块 1 代码中的 Declare 和 Function 之间添加 PtrSafe。 编辑:因此,经过进一步研究,我发现当使用长数据类型调用 Windows API 时,需要更新 long。所以它们应该从 Long 更改为 LongPtr 或 LongLong。我都试过了,现在它告诉我 Sub ChangeApplicationIcon() 中的 ExtractIcon32 类型不匹配。我已经更改了 Long (8) 的每个实例。EDIT2: BigBen 指出 Icon& 意味着 Icon As Long。所以我实现了他将 Icon& 更改为“Icon As LongPtr”的编辑。代码运行没有错误,但仍然没有更改图标。编辑3:我已经在我的个人游戏桌面上尝试了 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 图标更改为记事本图标。

标签: excelvba32bit-64bit

解决方案


推荐阅读