Genel Bakış
Application.OnKey (Application.OnKey method), belirttiğiniz tuşa ya da tuş birleşimine basıldığında çalışacak bir yordam (makro) atamanızı sağlayan yöntemdir. Excel'in yerleşik kısayollarını geçici olarak başka bir makroya yönlendirebilir, tamamen devre dışı bırakabilir ya da eski haline döndürebilirsiniz.
Atama dosyaya kaydedilmez; Excel kapanınca ya da yeni bir OnKey çağrısıyla sıfırlanınca kaybolur. Bu nedenle atamayı genellikle Workbook_Open olayında yapar, Workbook_BeforeClose olayında da eski haline döndürürsünüz.
KisayolAta makrosunu bir kez çalıştırdıktan sonra Ctrl+M tuşuna bastığınızda Excel TutarHesapla makrosunu çalıştırır. Bu örnek tuş ataması yaptığı için burada çalıştırılmaz; denemek için makroyu kendi Excel'inizde çalıştırın. Atamayı kaldırmak için KisayolKaldir makrosunu çalıştırın.
Kitap açıldığında Delete ve Ctrl+C tuşları işlevsiz kalır; kitap kapanırken eski haline döner. Bu örnek de tuş ataması yaptığı için çalıştırılmaz. Menüden ve sağ tık menüsünden kopyalama ya da silme yine mümkündür; yani bu yöntem tam bir koruma sağlamaz.
Makro çalışınca Kalem satırının tutarı 102,00, Defter satırının tutarı 480,00, Dosya satırının tutarı 206,25 ve Klasör satırının tutarı 256,00 olarak yazılır. Ctrl+M atamasını yaptıysanız aynı sonucu bu tuşla da elde edersiniz.
Söz dizimi
Yöntemin genel biçimi aşağıdadır:Application.OnKey Key, Procedure
- Key: Zorunlu. Basılacak tuşu ya da tuş birleşimini gösteren metindir (ör. "^m", "{F8}", "%{LEFT}").
- Procedure: İsteğe bağlı. Çalıştırılacak yordamın adını içeren metindir. Bu bağımsız değişkeni hiç yazmazsanız tuş Excel'in normal davranışına döner. Boş metin ("") verirseniz tuşa basıldığında hiçbir şey olmaz; yani tuş devre dışı kalır. Varsayılan değeri yoktur.
Key bağımsız değişkeninde kullanılan kodlar
Tuş birleşimlerinde değiştirici tuşlar için şu işaretler kullanılır:- + (artı): Shift tuşu.
- ^ (şapka): Ctrl tuşu.
- % (yüzde): Alt tuşu.
- {BACKSPACE}, {DELETE} (ya da {DEL}), {ENTER}, {ESCAPE} (ya da {ESC}), {TAB}, {INSERT}: Düzenleme ve denetim tuşları.
- {HOME}, {END}, {PGUP}, {PGDN}: Sayfa ve satır gezinme tuşları.
- {UP}, {DOWN}, {LEFT}, {RIGHT}: Yön tuşları.
- {F1} ... {F15}: İşlev tuşları.
- {CAPSLOCK}, {NUMLOCK}, {SCROLLLOCK}, {BREAK}, {CLEAR}, {RETURN}: Diğer özel tuşlar.
- ~ (yaklaşık işareti): Ana klavyedeki Enter tuşu.
Yordam adı, kapsam ve ömür
Procedure olarak verdiğiniz makro bağımsız değişken almayan bir Sub olmalı ve standart bir modülde yer almalıdır. Başka bir kitaptaki makroyu çağıracaksanız adı kitap adıyla birlikte yazın:Application.OnKey "^m", "'Satis.xlsm'!TutarHesapla"
1. Ctrl+M ile makro çalıştırma ve kaldırma
Aşağıdaki kodu standart bir modüle yapıştırın. KisayolAta yordamı Ctrl+M tuşunu TutarHesapla makrosuna bağlar, KisayolKaldir yordamı ise tuşu normal haline döndürür. Hedef makronun kendisi üçüncü örnekte verilmiştir; onu da aynı modüle ekleyin.
VBA
11 satır
Option Explicit
' Ctrl+M tuşunu TutarHesapla makrosuna bağlar
Public Sub KisayolAta()
Application.OnKey "^m", "TutarHesapla"
End Sub
' Atamayı kaldırır; Ctrl+M normal davranışına döner
Public Sub KisayolKaldir()
Application.OnKey "^m"
End Sub
Application.OnKey
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Ürün | Miktar | Birim Fiyat |
| 2 | Kalem | 12 | 8,50 |
| 3 | Defter | 20 | 24,00 |
| 4 | Dosya | 15 | 13,75 |
Kısayol AtamaExcelDepo v1.0.0
2. Tuşu devre dışı bırakma ve kitapla birlikte yönetme
Bu kodu ThisWorkbook modülüne yapıştırın. Kitap açılınca Delete tuşu ve Ctrl+C devre dışı kalır; kitap kapanırken tuşlar eski haline döner. Böylece kullanıcı bu tuşlarla listedeki verileri yanlışlıkla silemez ya da kopyalayamaz; ancak menüden ve sağ tık menüsünden bu işlemler yine yapılabilir.
VBA
13 satır
Option Explicit
Private Sub Workbook_Open()
' Boş metin: tuşa basılınca hiçbir şey olmaz
Application.OnKey "{DELETE}", ""
Application.OnKey "^c", ""
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' Procedure verilmez: tuşlar normal davranışına döner
Application.OnKey "{DELETE}"
Application.OnKey "^c"
End Sub
Application.OnKey
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Personel | Şehir | Maaş |
| 2 | Ayşe Yılmaz | Ankara | 28.500,00 |
| 3 | Mehmet Demir | İzmir | 31.200,00 |
| 4 | Zeynep Kaya | Bursa | 26.750,00 |
Personel ListesiExcelDepo v1.0.0
3. Tuşa bağlanan hedef makro
Birinci örnekteki Ctrl+M atamasının çalıştıracağı makro budur. Kodu standart modüle yapıştırın. Makro, her satırda miktarı birim fiyatla çarpıp sonucu Tutar sütununa yazar. Burada makro doğrudan çalıştırılarak sonucu gösterilir.
VBA
14 satır
Option Explicit
' OnKey ile bir tuşa bağlanabilecek hedef makro
Public Sub TutarHesapla()
Dim ws As Worksheet
Dim i As Long
Set ws = ActiveSheet
' 2. satırdan 5. satıra kadar Miktar x Birim Fiyat
For i = 2 To 5
ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
Next i
End Sub
Application.OnKey
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ürün | Miktar | Birim Fiyat | Tutar |
| 2 | Kalem | 12 | 8,50 | 102,00 |
| 3 | Defter | 20 | 24,00 | 480,00 |
| 4 | Dosya | 15 | 13,75 | 206,25 |
| 5 | Klasör | 8 | 32,00 | 256,00 |
Tutar HesabıExcelDepo v1.0.0
Kullanırken dikkat edin
- Atama kalıcı değildir: OnKey ataması dosyaya kaydedilmez; Excel kapanınca kaybolur. Kalıcı etki istiyorsanız atamayı Workbook_Open olayında yapın ve Workbook_BeforeClose olayında geri alın.
- Uygulama düzeyinde etkilidir: Atama yalnızca makroyu içeren kitabı değil, Excel'de açık tüm kitapları etkiler. Devre dışı bıraktığınız bir tuş başka kitaplarda da çalışmaz; bu yüzden işiniz bitince tuşu mutlaka eski haline döndürün.
- Boş metin ile bağımsız değişkeni atlamak aynı değildir: Procedure yerine boş metin ("") yazarsanız tuş devre dışı kalır. Bağımsız değişkeni hiç yazmazsanız tuş Excel'in varsayılan davranışına döner. Bu iki durumu karıştırmak, tuşların yanlışlıkla kilitli kalmasına yol açar.
- Hedef yordam erişilebilir olmalı: Yordam standart modülde olmalı, bağımsız değişken almamalı ve adı doğru yazılmalıdır. Yordam bulunamazsa tuşa basıldığında hata alırsınız. Başka kitaptaki makro için kitap adını kesme işaretleri içinde yazın.
- Makro güvenliği: Makrolar devre dışıysa atama hiç yapılmaz. Dosyayı .xlsm biçiminde kaydedin ve makrolara izin verildiğinden emin olun.
- Yerleşik kısayolları ezerken dikkatli olun: Ctrl+C, Ctrl+V ya da Delete gibi yaygın tuşları devre dışı bırakmak kullanıcıyı şaşırtır. Mümkünse Excel'de varsayılan atamaya sahip olmayan birleşimleri (ör. Ctrl+M) seçin.
- İlgili konular:
- Workbook_Open: Kitap açılırken atama yapmak için kullanılan olay.
- Workbook_BeforeClose: Kitap kapanırken atamaları geri almak için kullanılan olay.
- Application.OnTime: Bir makroyu belirli bir zamanda çalıştırır.
- Application.MacroOptions: Makroya kısayol tuşu ve açıklama atar.
- Application.Run: Adı metin olarak verilen makroyu çalıştırır.
- Geliştirici > Makrolar > Seçenekler (Developer > Macros > Options): Makroya Ctrl tabanlı kısayol atama penceresi.