Özellik ikonu

SendKeys

İndirme izni yok

Genel Bakış

SendKeys (Application.SendKeys), Excel'de etkin olan pencereye klavyeden tuşa basılmış gibi tuş vuruşları gönderen yöntemdir. Nesne modeliyle doğrudan yapılamayan, yalnızca klavye kısayoluyla ya da bir iletişim kutusuna yazılarak yapılabilen işlemleri makroya bağlamak için kullanılır. Tuş vuruşları gerçek klavye girişi gibi işlendiği için sonucu etkin pencereye ve odaktaki öğeye bağlıdır; bu nedenle son çare olarak düşünülmelidir.

Söz dizimi​

Yöntem Application nesnesine aittir ve tuş dizisini bir metin olarak alır:
VBA 3 satır
Application.SendKeys Keys, Wait
' ya da değer döndürmeden parantezli yazım:
Application.SendKeys(Keys:="^c", Wait:=True)
  • Keys: Gönderilecek tuş vuruşlarını tanımlayan metin; zorunludur. Düz karakterler olduğu gibi yazılır, özel tuşlar süslü parantez içinde kod olarak verilir.
  • Wait: İsteğe bağlıdır; varsayılanı False'tur. True verilirse Excel tuşlar işlenene kadar bekler ve sonra makroya döner. False iken makro hemen devam eder, tuşlar ise Excel boştayken ya da bir iletişim kutusu girdi beklerken işlenir.
Yöntem değer döndürmez. Başka bir uygulamaya tuş göndermek için önce o uygulamanın etkinleştirilmesi gerekir.

Özel tuş kodları​

Yazdırılamayan tuşlar süslü parantez içinde kodlarıyla yazılır. Sık kullanılanlar:
  • {BACKSPACE} ya da {BS}: Geri silme tuşu.
  • {DELETE} ya da {DEL}: Delete tuşu.
  • {ENTER} ya da ~: Enter tuşu.
  • {ESC}: Esc tuşu.
  • {TAB}: Tab tuşu.
  • {HOME}, {END}: Home ve End tuşları.
  • {PGUP}, {PGDN}: Sayfa yukarı ve sayfa aşağı.
  • {UP}, {DOWN}, {LEFT}, {RIGHT}: Ok tuşları.
  • {INSERT}: Insert tuşu.
  • {F1} ... {F15}: İşlev tuşları.
  • {CAPSLOCK}, {NUMLOCK}, {SCROLLLOCK}: Kilit tuşları.
  • {BREAK}, {HELP}, {RETURN}: Diğer özel tuşlar.
Bir tuşu yinelemek için kodun içine sayı yazılır; örneğin {LEFT 5} sol ok tuşuna beş kez basar.

Değiştirici tuşlar ve gruplama​

Üç tuş özel anlam taşır: + Shift tuşunu, ^ Ctrl tuşunu, % Alt tuşunu temsil eder. Bu simge, kendisinden hemen sonra gelen tuşa uygulanır; örneğin ^c Ctrl+C, %f Alt+F anlamına gelir. Birden çok tuşa aynı değiştirici uygulanacaksa tuşlar parantezle gruplanır: +(ec) Shift basılıyken e ve c tuşlarına basar.
Bu simgelerden biri düz metin olarak gönderilecekse süslü parantez içine alınmalıdır: {+}, {^}, {%}. Aynı kural ~, (, ), {, }, [ ve ] karakterleri için de geçerlidir; süslü parantezler {{} ve {}} biçiminde yazılır.

Ne zaman ve nasıl kullanılır​

Tuş vuruşları, makro çalışırken odakta olan pencereye gider. Wait değeri False ise tuşlar makro sürerken kuyruğa girer ve InputBox gibi girdi bekleyen bir iletişim kutusu açıldığında işlenir. Bu davranış, kutuyu önceden doldurmak için kullanılabilir. Wait değeri True ise bir sonraki makro satırına geçilmeden önce tuşların işlenmesi sağlanır; ancak bir iletişim kutusu açıp kapanmasını beklemek için yine de güvenilir değildir.

1. Özel karakterleri SendKeys için kaçırma​

A sütunundaki metinlerde SendKeys'in özel anlam verdiği karakterler var. Aşağıdaki kodu standart modüle (Ekle > Modül) yapıştırın. Makro her metnin SendKeys'e güvenle gönderilebilecek biçimini B sütununa yazar; özel karakterleri süslü parantez içine alır.
VBA 29 satır
Option Explicit

' Özel karakterleri {..} içine alan yardımcı işlev
Function SendKeysKacis(ByVal metin As String) As String
    Dim i As Long
    Dim c As String
    Dim sonuc As String
    For i = 1 To Len(metin)
        c = Mid$(metin, i, 1)
        Select Case c
            Case "+", "^", "%", "~", "(", ")", "{", "}", "[", "]"
                sonuc = sonuc & "{" & c & "}"
            Case Else
                sonuc = sonuc & c
        End Select
    Next i
    SendKeysKacis = sonuc
End Function

Sub KacisYaz()
    Dim ws As Worksheet
    Dim r As Long
    Set ws = ActiveSheet
    For r = 2 To 7
        ' Metin olarak yazılsın, formül sanılmasın
        ws.Cells(r, 2).NumberFormat = "@"
        ws.Cells(r, 2).Value = SendKeysKacis(CStr(ws.Cells(r, 1).Value))
    Next r
End Sub
SendKeys
Formülünü incelemek için bir hücre seçin.
AB
1MetinSendKeys Kodu
2Toplam+KDVToplam{+}KDV
3Yüzde 50%Yüzde 50{%}
4Alan^2Alan{^}2
5Ali~VeliAli{~}Veli
6{Not}{{}Not{}}
7Liste(Ocak)(1)Liste{(}Ocak{)}{(}1{)}
Metin KaçışExcelDepo v1.0.0
Makro her satır için özel karakterleri süslü parantez içine alır. İlk metin B2 hücresinde Toplam{+}KDV, yüzde işaretli metin B3 hücresinde Yüzde 50{%} olur. Üstel işaretli metnin kodu Alan{^}2, tilde içerenin kodu Ali{~}Veli, süslü parantezli metnin kodu {{}Not{}} ve parantezli metnin kodu Liste{(}Ocak{)}{[}1{]} biçimindedir. Bu değerler SendKeys ile gönderildiğinde karakterler tuş birleşimi olarak değil düz metin olarak yazılır.

2. Tuş birleşiminden SendKeys kodu üretme​

Sayfada her satır bir tuşu ve onunla birlikte basılacak Ctrl, Shift, Alt seçeneklerini gösterir. Kodu standart modüle yapıştırın. Makro, değiştirici simgeleri (^, +, %) doğru sırayla tuşun önüne ekleyerek E sütununa SendKeys kodunu yazar.
VBA 18 satır
Option Explicit

Sub KodUret()
    Dim ws As Worksheet
    Dim r As Long
    Dim kod As String
    Set ws = ActiveSheet
    For r = 2 To 8
        kod = ""
        If ws.Cells(r, 2).Value = True Then kod = kod & "^"   ' Ctrl
        If ws.Cells(r, 3).Value = True Then kod = kod & "+"   ' Shift
        If ws.Cells(r, 4).Value = True Then kod = kod & "%"   ' Alt
        kod = kod & ws.Cells(r, 1).Value
        ' + ile başlayan kod formül sanılmasın
        ws.Cells(r, 5).NumberFormat = "@"
        ws.Cells(r, 5).Value = kod
    Next r
End Sub
SendKeys
Formülünü incelemek için bir hücre seçin.
ABCDE
1TuşCtrlShiftAltSendKeys Kodu
2cDOĞRUYANLIŞYANLIŞ^c
3vDOĞRUYANLIŞYANLIŞ^v
4lDOĞRUDOĞRUYANLIŞ^+l
5fYANLIŞYANLIŞDOĞRU%f
6{F9}YANLIŞYANLIŞYANLIŞ{F9}
7{HOME}DOĞRUYANLIŞYANLIŞ^{HOME}
8{DELETE}YANLIŞDOĞRUYANLIŞ+{DELETE}
Tuş KodlarıExcelDepo v1.0.0
Makro işaretli seçeneklere göre simgeleri tuşun önüne ekler. Ctrl+C için E2 hücresinde ^c, Ctrl+Shift+L için E4 hücresinde ^+l, Alt+F için E5 hücresinde %f yazar. Değiştirici seçilmeyen {F9} satırında kod E6 hücresinde {F9} olarak kalır. Ctrl+Home için E7 hücresindeki ^{HOME} ve Shift+Delete için E8 hücresindeki +{DELETE} değerleri doğrudan Application.SendKeys içine yazılabilir.

3. InputBox'ı önceden doldurma​

Bu örnekte SendKeys, açılacak InputBox'a önceden metin ve Enter tuşu gönderir. Kodu standart modüle yapıştırın. Wait değeri False olduğu için tuşlar kuyrukta bekler ve InputBox açıldığında işlenir. Kod etkileşimli bir iletişim kutusu açtığı için bu sayfada otomatik çalıştırılmaz.
VBA 10 satır
Option Explicit

Sub SehirSor()
    Dim sehir As String
    ' Tuşlar kuyruğa girer, InputBox açılınca işlenir
    Application.SendKeys "Ankara{ENTER}", False
    sehir = InputBox("Şehir adını girin:", "Şehir")
    ' Sonucu etkin sayfanın B2 hücresine yaz
    ActiveSheet.Range("B2").Value = sehir
End Sub
SendKeys
Formülünü incelemek için bir hücre seçin.
AB
1AlanDeğer
2Şehir
Veri GirişiExcelDepo v1.0.0
Makro çalıştırıldığında InputBox açılır, kutuya Ankara yazılıp Enter'a basılmış gibi kapanır ve B2 hücresine Ankara metni yazılır. Kullanıcıya hiçbir şey sorulmadığı için bu yöntem yalnızca test ya da otomasyon amacıyla anlamlıdır; gerçek bir giriş istiyorsanız SendKeys satırını kaldırın.

Kullanırken dikkat edin​

  • Güvenilirlik sınırı: SendKeys tuşları etkin pencereye gönderir. Makro çalışırken başka bir pencere öne geçerse, kullanıcı klavyeye dokunursa ya da bir uyarı penceresi açılırsa tuşlar yanlış yere gidebilir. Nesne modeliyle yapılabilen her işlemi (hücre yazma, kopyalama, hesaplama, kaydetme) SendKeys yerine doğrudan özellik ve yöntemlerle yapın.
  • Wait değerine dikkat edin: Wait değeri False iken makro tuşlar işlenmeden devam eder ve sıralama beklediğinizden farklı olabilir. True değeri tuşların işlenmesini bekler; ancak bir iletişim kutusunun açılıp kapanmasını garanti etmez. Kutu açan bir komutu SendKeys ile çağırıp aynı satırda yanıtlamaya çalışmak sık görülen bir hatadır.
  • Özel karakterleri kaçırmayı unutmayın: Kullanıcıdan ya da hücrelerden gelen metinde +, ^, %, ~, parantez ve köşeli parantez karakterleri varsa bunları süslü parantez içine almazsanız tuş birleşimi olarak yorumlanırlar. Birinci örnekteki gibi bir yardımcı işlev kullanın.
  • Klavye ve dil bağımlılığı: Alt tuşlu menü kısayolları Excel'in arayüz diline ve sürümüne göre değişir; Türkçe Excel'de çalışan bir Alt dizisi İngilizce Excel'de başka bir komutu çalıştırabilir. Şerit komutları için mümkünse VBA nesne modelini ya da CommandBars.ExecuteMso yöntemini tercih edin.
  • Excel dışındaki uygulamalar: Başka bir uygulamaya tuş göndermek için önce o uygulamanın etkinleştirilmesi gerekir. Yönetici ayrıcalığıyla çalışan pencerelere, güvenlik ayarları nedeniyle tuş gönderilemeyebilir. Excel'in ayrı bir örneğine ya da bazı çevrimiçi sürümlere de güvenilir biçimde gönderilemez.
  • İlgili konular: MsgBox, InputBox, Application.OnKey, Application.Calculate, Application.Goto, Application.Wait, AppActivate ve Application.EnableEvents konuları bu sayfayla birlikte incelenebilir.
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
15
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst