1

閉じたときにクリーンアップ手順を実行する必要があるユーザー フォームがあります。ボタンを無効にしたり、非表示にしたりしたいのですが、Xそれでもフォームをアンロードできるようにする必要があります。以下のようなコードを使用しましたが、ブロックもしますUnload Me

'Disables closing via x button
Sub UserForm_QueryClose(Cancel As Integer, ClsoeMode As Integer)
    If CloseMode = vbFormControlMenu Then
        MsgBox ("BLOCKED")
        Cancel = True
    End If
End Sub
4

3 に答える 3

6

このような場合は使用しないでくださいUserForm_QueryClose。API を使用RemoveMenuGetSystemMenuFindWindow

これは、API に関する私のお気に入りのサイトです。

RemoveMenu : http://allapi.mentalis.org/apilist/RemoveMenu.shtml

GetSystemMenu : http://allapi.mentalis.org/apilist/GetSystemMenu.shtml

FindWindow : http://allapi.mentalis.org/apilist/FindWindow.shtml

この例を参照してください

Option Explicit

Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, _
ByVal wFlags As Long) As Long

Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Const MF_BYPOSITION = &H400&

Private Sub UserForm_Initialize()
    Dim Ret As Long

    '~~> Change UserForm1 to match your userform's caption
    Ret = FindWindow("ThunderDFrame", "UserForm1")

    Do While Ret = 0
        '~~> Change UserForm1 to match your userform's caption
        Ret = FindWindow("ThunderDFrame", "UserForm1")
        DoEvents
    Loop

    RemoveMenu GetSystemMenu(Ret, 0), 6, MF_BYPOSITION
End Sub

Private Sub CommandButton1_Click()
    Unload Me
End Sub

スクリーンショット:

ここに画像の説明を入力

于 2013-04-04T10:51:40.193 に答える
1

これが古いフィードであることは知っていますが、スペルがClsoeMode間違っています。それをに変更するだけでCloseMode、問題が解決するはずです。

于 2013-08-12T14:42:31.370 に答える