Özellik ikonu

SetFocus

İndirme izni yok

Genel Bakış

SetFocus (odağı ayarlama yöntemi), bir UserForm üzerindeki ya da çalışma sayfasına yerleştirilmiş ActiveX denetimine odağı taşır. Odak, klavyeden girilen verinin hangi denetime gideceğini belirler. Doğrulama hatasından sonra kullanıcıyı ilgili kutuya döndürmek ve formu kullanıma hazır açmak için kullanılır.

Söz dizimi​

SetFocus bir yöntemdir ve parametre almaz. Denetimin adıyla birlikte çağrılır:
VBA 5 satır
denetim.SetFocus

' Örnekler
txtAd.SetFocus
Me.cmbSehir.SetFocus
  • denetim: odağın taşınacağı denetim (TextBox, ComboBox, ListBox, CommandButton, CheckBox vb.); zorunludur.
  • Parametre: yoktur. Yöntem değer döndürmez.
  • Me: UserForm kod modülünde formun kendisini belirtir; yazmak isteğe bağlıdır.
Hücreler için SetFocus kullanılmaz. Bir hücreye gitmek için Range.Select ya da Application.Goto kullanılır.

Odak ne zaman taşınamaz​

Hedef denetimde Visible özelliği False ya da Enabled özelliği False ise SetFocus çalışma zamanı hatası verir (hata 2110, odak denetime taşınamıyor). Form henüz görünmeden, örneğin UserForm_Initialize olayında çağrıldığında da hata alabilirsiniz. Bu nedenle ilk odağı UserForm_Activate olayında ya da denetimlerin TabIndex sırasıyla belirleyin.
Bir MultiPage ya da TabStrip içindeki denetime odak vermeden önce ilgili sayfayı Value özelliğiyle seçin; seçili olmayan sayfadaki denetime odak taşınamaz.

Odak sırası ve ilgili olaylar​

Kullanıcı Tab tuşuna bastığında odak, TabIndex özelliğinin belirlediği sırayla ilerler. TabStop özelliği False olan denetimlere Tab ile ulaşılamaz, ancak SetFocus ile odak verilebilir.
  • Enter: denetim odağı aldığında oluşur.
  • Exit: denetim odağı kaybetmeden önce oluşur; Cancel parametresi True yapılırsa odak denetimde kalır.
  • UserForm_Activate: form etkinleştiğinde oluşur; ilk odağı vermek için uygundur.

1. Boş alanda odağı kutuya döndürme​

frmKayit adlı bir UserForm oluşturun; üzerine txtAd, txtSehir adlı iki TextBox ve btnKaydet adlı bir CommandButton ekleyin. Aşağıdaki kodu UserForm'un kod modülüne yapıştırın. Kullanıcı boş alanla Kaydet düğmesine basarsa ileti görür ve imleç eksik kutuya taşınır. Kayıt tamamlanınca formu yeni kayıt için hazırlamak üzere odak yeniden ad kutusuna verilir.
VBA 32 satır
Option Explicit

' UserForm modülü: frmKayit
Private Sub btnKaydet_Click()
    Dim satir As Long

    ' Ad boşsa uyar ve odağı ad kutusuna ver
    If Trim(txtAd.Value) = "" Then
        MsgBox "Ad alanı boş bırakılamaz.", vbExclamation
        txtAd.SetFocus
        Exit Sub
    End If

    ' Şehir boşsa uyar ve odağı şehir kutusuna ver
    If Trim(txtSehir.Value) = "" Then
        MsgBox "Şehir alanı boş bırakılamaz.", vbExclamation
        txtSehir.SetFocus
        Exit Sub
    End If

    ' Listenin ilk boş satırına yaz
    With Worksheets("Kayıt Listesi")
        satir = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        .Cells(satir, 1).Value = txtAd.Value
        .Cells(satir, 2).Value = txtSehir.Value
    End With

    ' Yeni kayıt için kutuları temizle ve odağı başa al
    txtAd.Value = ""
    txtSehir.Value = ""
    txtAd.SetFocus
End Sub
SetFocus
Formülünü incelemek için bir hücre seçin.
AB
1AdŞehir
2Ayşe YılmazAnkara
3Mehmet Kayaİzmir
4Elif DemirBursa
Kayıt ListesiExcelDepo v1.0.0
Form açıkken Ad kutusu boşsa ileti görüntülenir ve imleç Ad kutusuna döner. Ad doluyken Şehir boşsa imleç Şehir kutusuna gider. Kayıt tamamlandığında satır listeye eklenir ve imleç yeni giriş için Ad kutusunda bekler. Bu örnekte UserForm ve MsgBox kullanıldığı için sayfa otomatik çalıştırılmamıştır; sonucu formu kendiniz açarak görebilirsiniz.

2. Form açılışında ve sayfa değişiminde odak​

frmSiparis adlı bir UserForm oluşturun. Üzerine MultiPage1 (iki sayfalı), ilk sayfaya txtMiktar, ikinci sayfaya txtTelefon adlı TextBox'lar ve btnTelefon adlı bir düğme ekleyin; düğmeyi MultiPage dışına koyun. Kodu UserForm'un kod modülüne yapıştırın. Form açılınca imleç miktar kutusunda başlar. Düğmeye basılınca önce ikinci sayfa seçilir, sonra telefon kutusuna odak verilir.
VBA 22 satır
Option Explicit

' UserForm modülü: frmSiparis
' Form görüntülendikten sonra ilk odağı ver
Private Sub UserForm_Activate()
    MultiPage1.Value = 0
    txtMiktar.SetFocus
End Sub

' Telefon alanına git: önce sayfayı seç, sonra odağı ver
Private Sub btnTelefon_Click()
    MultiPage1.Value = 1
    txtTelefon.SetFocus
End Sub

' Miktar sayı değilse kutudan çıkışı engelle
Private Sub txtMiktar_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Not IsNumeric(txtMiktar.Value) Or txtMiktar.Value = "" Then
        MsgBox "Lütfen miktarı sayı olarak girin.", vbInformation
        Cancel = True
    End If
End Sub
SetFocus
Formülünü incelemek için bir hücre seçin.
ABC
1ÜrünMiktarTelefon
2Kırtasiye Seti120532 555 01 02
3Defter400505 555 03 04
Sipariş FormuExcelDepo v1.0.0
Form görüntülendiğinde Activate olayı çalışır ve miktar kutusu odağı alır. Telefon düğmesinde sayfa değiştirme komutu SetFocus satırından önce gelir; sıra tersine çevrilirse gizli sayfadaki denetime odak verilemez ve hata oluşur. Exit olayındaki Cancel = True ataması, geçersiz miktar girildiğinde imlecin kutuda kalmasını sağlar. UserForm kullanıldığı için bu örnek otomatik çalıştırılmamıştır.

3. Hücrede odak: SetFocus yerine Select​

Hücreler denetim olmadığı için SetFocus kullanamazsınız; bir hücreyi etkin yapmak için Select yöntemi kullanılır. Aşağıdaki kodu standart modüle yapıştırın. Makro, stoku sıfır olan ilk ürünü bulur, o hücreyi seçer ve etkin hücrenin adresini C2 hücresine yazar.
VBA 19 satır
Option Explicit

Sub SifirStokluHucreyeGit()
    Dim ws As Worksheet
    Dim r As Long

    Set ws = ActiveSheet
    ws.Activate

    ' Stok sütununda (B) ilk sıfır değeri ara
    For r = 2 To 6
        If ws.Cells(r, 2).Value = 0 Then
            ws.Cells(r, 2).Select
            ' Etkin hücrenin adresini sonuç hücresine yaz
            ws.Range("C2").Value = ActiveCell.Address(False, False)
            Exit For
        End If
    Next r
End Sub
SetFocus
Formülünü incelemek için bir hücre seçin.
ABC
1ÜrünStokOdak Adresi
2Kalem150B4
3Defter80
4Silgi0
5Dosya35
6Cetvel0
Stok TakibiExcelDepo v1.0.0
Makro, B sütununda ilk sıfır stoklu hücreyi bulur, onu seçer ve adresini C2 hücresine yazar. Etkin hücrenin adresi B4 olarak görünür. Döngü Exit For ile ilk eşleşmede durur, bu nedenle sonraki sıfır stoklu ürün seçimi değiştirmez.

Kullanırken dikkat edin​

  • Hata 2110 ile karşılaşırsanız: SetFocus, görünmeyen (Visible False), devre dışı (Enabled False) ya da henüz görüntülenmemiş bir forma ait denetimde hata verir. İlk odağı UserForm_Initialize yerine UserForm_Activate olayında verin.
  • MultiPage içindeki denetimler: Odak vereceğiniz denetim başka bir MultiPage sayfasındaysa önce MultiPage.Value ile o sayfayı seçin, ardından SetFocus çağırın.
  • Hücreler için kullanılmaz: Çalışma sayfası hücreleri denetim değildir. Hücreye gitmek için Range.Select, Range.Activate ya da Application.Goto kullanın. Select kullanmadan önce ilgili sayfanın etkin olması gerekir.
  • Sayfadaki ActiveX denetimleri: Çalışma sayfasına yerleştirilmiş ActiveX düğmeler tıklanınca odağı alır ve bu, kullanıcının sayfada çalışmasını engelleyebilir. Düğmenin TakeFocusOnClick özelliğini False yapın ya da işlem sonunda odağı hücreye geri vermek için bir hücre seçin.
  • Kullanıcıya hata gösterirken sıra: Önce uyarı iletisini gösterin, ardından SetFocus çağırın. Böylece ileti kapandığında imleç doğru kutuda bekler. Çok sayıda alan doğruluyorsanız ilk hatalı alanda Exit Sub ile çıkın.
  • İlgili konular:
    • TabIndex ve TabStop: Tab ile odak sırasını belirleyen denetim özellikleri.
    • UserForm_Activate: formun ilk odağını vermek için kullanılan olay.
    • Exit ve Enter olayları: denetimin odağı kaybetmesi ve alması sırasında çalışır.
    • Range.Select ve Application.Goto: hücrelere odaklanma yolları.
    • MsgBox: doğrulama uyarılarını göstermek için kullanılır.
    • MultiPage: sayfalı form denetimi.
Ö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
7
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst