Form üzerinde 20 adet TextBox, 10 Adet CommandButton vs.. varsa; her nesnenin tek tek KeyDown olaylarına kod yazmaya gerek kalmadan Class ile nasıl yapılacağı konusunda bir örnek çalışma hazırladım. Form açıldığında Standart VBA nesnelerinden hangisi aktif olursa olsun.
Projenize ExcelVBANet adında bir UserForm ekleyin. StdModul adında bir tane Standart Module ekleyin, EVN adında da bir tane de Class Module ekleyin.
ExcelVBANet adlı UserForm'unuzda sadece TextBox, ComboBox, CommandButton, MultiPage vs.. nesneleriniz olsun. Kod sayfasına bu aşamada kod yazmamıza gerek olmuyor. Proje amacınıza göre daha sonra kodlarsınız.
StdModul adlı modüle aşağıdaki kodları yazın.
- Kod: Tümünü seç
Global Const evnF1 As Long = &H70
Global Const evnF2 As Long = &H71
Global Const evnF3 As Long = &H72
Global Const evnF4 As Long = &H73
Global Const evnF5 As Long = &H74
Global Const evnF6 As Long = &H75
Global Const evnF7 As Long = &H76
Global Const evnF8 As Long = &H77
Global Const evnF9 As Long = &H78
Global Const evnF10 As Long = &H79
Global Const evnF11 As Long = (&H37 + &H43)
Global Const evnF12 As Long = (&H37 + &H44)
Global Const evnESC As Long = (&H19 + &H2)
Public evnTus As Long
Public Nesne() As New EVN
Static Sub Kontrol()
For Each n In ExcelVBANet.Controls
e = e + 1
ReDim Preserve Nesne(1 To e)
Select Case TypeName(n)
Case Is = "Label"
Set Nesne(e).Label = n
Case Is = "TextBox"
Set Nesne(e).TextBox = n
Case Is = "ComboBox"
Set Nesne(e).ComboBox = n
Case Is = "CheckBox"
Set Nesne(e).CheckBox = n
Case Is = "CommandButton"
Set Nesne(e).CommandButton = n
Case Is = "Image"
Set Nesne(e).Image = n
Case Is = "ListBox"
Set Nesne(e).ListBox = n
Case Is = "MultiPage"
Set Nesne(e).MultiPage = n
Case Is = "OptionButton"
Set Nesne(e).OptionButton = n
Case Is = "ScrollBar"
Set Nesne(e).ScrollBar = n
Case Is = "SpinButton"
Set Nesne(e).SpinButton = n
Case Is = "ToggleButton"
Set Nesne(e).ToggleButton = n
Case Is = "ExcelVBANet"
Set Nesne(e).ExcelVBANet = n
End Select
Next n
ExcelVBANet.Show
End Sub
Public Sub ftus()
KeyCode = evnTus
Select Case KeyCode
Case Is = evnF1
MsgBox "F1 bastınız"
Case Is = evnF2
MsgBox "F2 bastınız"
Case Is = evnF3
MsgBox "F3 bastınız"
Case Is = evnF4
MsgBox "F4 bastınız"
Case Is = evnF5
MsgBox "F5 bastınız"
Case Is = evnF6
MsgBox "F6 bastınız"
Case Is = evnF7
MsgBox "F7 bastınız"
Case Is = evnF8
MsgBox "F8 bastınız"
Case Is = evnF9
MsgBox "F9 bastınız"
Case Is = evnF10
MsgBox "F10 bastınız"
Case Is = evnF11
MsgBox "F11 bastınız"
Case Is = evnF12
MsgBox "F12 bastınız"
Case Is = evnESC
MsgBox "ESC tuşuna bastınız"
If MsgBox("Form kapansın mı", vbYesNo + vbQuestion, "Formu Kapatmayı Seçtiniz") = vbYes Then End
End Select
End Sub
EVN adlı Class Module içine de aşağıdaki kod bloklarını ekleyin.
- Kod: Tümünü seç
Public WithEvents CheckBox As MSForms.CheckBox
Public WithEvents ComboBox As MSForms.ComboBox
Public WithEvents CommandButton As MSForms.CommandButton
Public WithEvents ExcelVBANet As MSForms.UserForm
Public WithEvents Image As MSForms.Image
Public WithEvents ListBox As MSForms.ListBox
Public WithEvents MultiPage As MSForms.MultiPage
Public WithEvents OptionButton As MSForms.OptionButton
Public WithEvents ScrollBar As MSForms.ScrollBar
Public WithEvents SpinButton As MSForms.SpinButton
Public WithEvents TextBox As MSForms.TextBox
Public WithEvents ToggleButton As MSForms.ToggleButton
Public WithEvents Label As MSForms.Label
Public Sub TextBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
evnTus = KeyCode
Call ftus
End Sub
Public Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
evnTus = KeyCode
Call ftus
End Sub
Public Sub Image_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
evnTus = KeyCode
Call ftus
End Sub
Public Sub CheckBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
evnTus = KeyCode
Call ftus
End Sub
Public Sub ComboBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
evnTus = KeyCode
Call ftus
End Sub
Public Sub CommandButton_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
evnTus = KeyCode
Call ftus
End Sub
Public Sub ListBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
evnTus = KeyCode
Call ftus
End Sub
Public Sub Multipage_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
evnTus = KeyCode
Call ftus
End Sub
Public Sub OptionButton_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
evnTus = KeyCode
Call ftus
End Sub
Public Sub ScrollBar_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
evnTus = KeyCode
Call ftus
End Sub
Public Sub SpinButton_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
evnTus = KeyCode
Call ftus
End Sub
Public Sub ToggleButton_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
evnTus = KeyCode
Call ftus
End Sub
Public Sub ExcelVBANet_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
evnTus = KeyCode
Call ftus
End Sub
ThisWorkbook kod sayfasına da aşağıdaki kodları ekleyip dosyanızı kaydedin ve kapatıp açın.
- Kod: Tümünü seç
Private Sub Workbook_Open()
Call Kontrol
End Sub
Şimdi form açıkken hangi nesne aktif olursa olsun, F tuşlarına ve ESC tuşuna basıp Class Module içindeki olayların çalışıp çalışmadığını test edebilirsiniz.




![gülümseyin [gulumse]](./images/smilies/saycheese.gif)

![Teşekkür ediyorum [TESEKKÜR]](./images/smilies/tesekkur.gif)