Почему этот код не работает даже после того, как я обновил его для использования в 64-битных системах? - PullRequest
0 голосов
/ 24 января 2019

Я использую скрипт .vbs, чтобы открыть файл .xlsm, чтобы избежать всплывающего экрана Excel (это маленький всплывающий квадрат, показывающий, что Excel загружается).Сценарий .vbs также скрывает ленту панели инструментов и выводит Excel 2016 в полноэкранный режим, но вводит раздражающую строку заголовка, которая содержит мини-значок Excel и суффикс «- Excel» после имени файла.Нашел код для этого, который работал на моем 32-разрядном Excel.Мне нужно использовать это на моем рабочем ноутбуке, но он имеет 64-разрядную версию Excel.Я добавил PtrSafe в свое объявление, но часть кода, изменяющая значок, похоже, ничего не делает.

Приведенный ниже код является исходным кодом для изменения значка.Поскольку я пытался использовать код в 64-разрядной версии Excel на ноутбуке своей компании, мне пришлось добавить PtrSafe между Declare и Function в коде модуля 1. РЕДАКТИРОВАТЬ: Итак, после дальнейших исследований я обнаружил, что при вызове Windows API с использованием длинных типов данных, длинные должны быть обновлены.Поэтому они должны быть изменены с Long на LongPtr или LongLong.Я попробовал оба, и теперь он говорит мне, что есть несоответствие типов на ExtractIcon32 в Sub ChangeApplicationIcon ().Я изменил каждый экземпляр 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 на значок блокнота.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...