dポイントプレゼントキャンペーン実施中!

こんばんは。
エクセル2003で、VBAでユーザーフォームを挿入し、
show modalをfalseにし、
「マクロの実行」でエクセルの画面に戻った時に、
「Esc」キーでユーザーフォームを消去することは不可能でしょうか?
何かやり方があったら教えて欲しいです。
よろしくお願いします。

A 回答 (2件)

こんばんは。



>「マクロの実行」でエクセルの画面に戻った時に、
UserForm がアクティブなのか、シートがアクティブか、どちらか分からないので、両方に取り付けてみました。

'UserForm モジュール

Private Sub UserForm_Initialize()
Dim ctrl As Control
 On Error Resume Next
 For Each ctrl In Me.Controls
  ctrl.TabStop = False
  ctrl.TakeFocusOnClick = False
 Next ctrl
 On Error GoTo 0
  Application.OnKey "{ESC}", "UserFormClose"
End Sub

Private Sub UserForm_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 If KeyCode = 27 Then 'ESC
  Unload Me
 End If
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  Application.OnKey "{ESC}" '設定取り消し
End Sub

'---------------------------------------
'標準モジュール

Sub UserFormClose()
 Unload UserForm1
End Sub
    • good
    • 0
この回答へのお礼

大変参考になりました。ご回答ありがとうございます。

お礼日時:2007/11/04 21:09

> エクセルの画面に戻った時に、


> 「Esc」キーでユーザーフォームを消去することは不可能でしょうか?

Userform ではなく、”Excel にフォーカスがある状態で”ってこと?
簡単にやるなら OnKey を使ってみたら?

' // ■ Userform 側
Private Sub UserForm_Initialize()
' // [ESC]キーにマクロを割り当てる
  Application.OnKey "{ESC}", "UnloadForm"
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
' // [ESC]キーマクロの割り当て解除
  Application.OnKey "{ESC}"
End Sub

' // ■ 標準モジュール
Sub UnloadForm()
  Unload UserForm1
End Sub

何だか趣旨を取り違えてそうですが....とりあえず投稿。
    • good
    • 0
この回答へのお礼

できました!
大変参考になりました。ご回答ありがとうございます。

お礼日時:2007/10/21 11:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています