Пользовательская форма, показывающая только 1 из 3 командных кнопок в Excel - PullRequest
0 голосов
/ 07 мая 2020

Я новичок в VBA, и я разработал файл Excel (.xlsb) в 32-битном формате. Чтобы сделать его совместимым с 64-битной версией, я также добавил код Ptrsafe в свои модули, и мой код также компилируется без ошибок в 64-битной версии. На листе есть кнопка, которая показывает форму пользователя с 3-мя командными кнопками. После добавления кода PtrSafe ошибок нет, но пользовательская форма показывает только 1 командную кнопку из 3 в 64-битной версии, и я не знаю почему. Если бы кто-то мог мне с этим помочь, было бы здорово.

Private Sub UserForm_Initialize()
Application.EnableCancelKey = xlDisabled

    Me.Caption = DI_Name
    Dim lngWindow As Long, lFrmHdl As Long
    lFrmHdl = FindWindowA(vbNullString, Me.Caption)
    lngWindow = GetWindowLong(lFrmHdl, GWL_STYLE)
    Call SetWindowLong(lFrmHdl, -20, 500)
    Call DrawMenuBar(lFrmHdl)

     Dim AppXCenter, AppYCenter As Long
    AppXCenter = Application.Left + (Application.Width / 2)
    AppYCenter = Application.Top + (Application.Height / 2)
    With Me
        .StartUpPosition = 0
        .Top = AppYCenter - (Me.Height / 2)
        .Left = AppXCenter - (Me.Width / 2)
    End With
End Sub

#If VBA7 Then
    Const GWL_STYLE = -16
    Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare PtrSafe Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If

И когда я вызываю форму, я сохраняю ее как:

vbaform.Show vbModeLess
...