1
Private Sub Workbook_BeforeSave...  
MsgBox "Why"

Form1にフォーカスがある場合、MsgBoxは表示されません。保存手順はキャンセルされます。
エンドユーザーがファイルを保存するためにフォームの外側をクリックする必要があるとは言わないでください。
Form1はモーダルではありません。

4

1 に答える 1

2

フォームにテキストボックスを配置するか、フォーム内にカーソルを置くか、フォームヘッダーをクリックしてください。次に、Ctrl + Sを押して、MsgBoxが表示されるかどうかを確認します。–アレグロ49分前

このような場合は、このコードをユーザーフォームに貼り付けるだけです。このコードは、他の回答から少し変更されています。

コード(試行およびテスト済み)

Private Declare Function GetKeyboardState _
Lib "user32" (pbKeyState As Byte) As Long

Private Myarray(255) As Byte

Dim Cntrl_Key As Boolean, Sletter_Key As Boolean

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
    If KeyCode = 17 Then Cntrl_Key = True
    If KeyCode = 83 Then Sletter_Key = True
    Call ShowKey
End Sub

Private Sub RefreshKeyState(RefreshState As Boolean)
   If RefreshState Then
      Call GetKeyboardState(Myarray(0))
   End If
End Sub

Private Sub ShowKey()
    '~~> Check for Ctrl + S
    If Cntrl_Key = True And Sletter_Key = True Then
        '~~> Save Workbook
        ActiveWorkbook.Save
        Cntrl_Key = False
        Sletter_Key = False
    End If
End Sub

スクリーンショット

ここに画像の説明を入力してください

CTRL:ユーザーが何かを押してから入力してから「S」キーを押すと、コードが実行されるため、これは絶対確実な方法ではありません。CTRL押された後に次に押されたキーが押されたかどうかを確認するための小さなチェックを含めることができますS。そうでない場合は、もう一度falseに設定します...たとえば

Private Declare Function GetKeyboardState _
Lib "user32" (pbKeyState As Byte) As Long

Private Myarray(255) As Byte

Dim Cntrl_Key As Boolean, Vletter_Key As Boolean
Dim OtherLetter As Boolean

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
    If KeyCode = 17 Then Cntrl_Key = True
    If KeyCode = 83 Then Vletter_Key = True
    If KeyCode <> 83 And KeyCode <> 17 Then
        OtherLetter = True
    End If
    Call ShowKey
End Sub

Private Sub RefreshKeyState(RefreshState As Boolean)
   If RefreshState Then
      Call GetKeyboardState(Myarray(0))
   End If
End Sub

Private Sub ShowKey()
    '~~> Check for Ctrl + S
    If Cntrl_Key = True And OtherLetter = True Then
        Cntrl_Key = False
    ElseIf Cntrl_Key = True And Vletter_Key = True Then
        '~~> Save Workbook
        ActiveWorkbook.Save
        Cntrl_Key = False
        Vletter_Key = False
    End If
End Sub
于 2012-09-25T17:05:16.620 に答える