Özellik ikonu

TextBox

İndirme izni yok

Genel Bakış

TextBox (Metin Kutusu), kullanıcının klavyeyle metin ya da sayı yazabildiği ve VBA kodunun bu girişi okuyabildiği Microsoft Forms denetimidir. UserForm üzerinde veri giriş formları hazırlamak, ayrıca çalışma sayfasına ActiveX denetimi olarak eklenen kutulardan değer almak için kullanılır. Denetimin içeriği Text ya da Value özelliğiyle okunur ve yazılır; içerik her zaman metin olarak gelir.

TextBox nedir ve nerede kullanılır​

TextBox, Microsoft Forms 2.0 denetim kitaplığının bir parçasıdır. İki yerde kullanılır:
  • UserForm: VBA Düzenleyicisi'nde (Alt+F11) bir UserForm ekleyin, Araç Kutusu (Toolbox) içinden Metin Kutusu (TextBox) simgesini forma sürükleyin.
  • Çalışma sayfası: Geliştirici > Denetimler > Ekle > ActiveX Denetimleri > Metin Kutusu (Developer > Controls > Insert > ActiveX Controls > Text Box) yolunu izleyin. Denetimi düzenlemek için Tasarım Modu (Design Mode) açık olmalıdır.
Sayfaya Ekle > Metin Kutusu (Insert > Text Box) ile eklenen kutu ise bir Şekil (Shape) nesnesidir ve bu sayfada anlatılan TextBox denetiminden farklıdır; olay üretmez, Shapes koleksiyonuyla yönetilir.
Denetimlere kodda kolay ulaşmak için anlamlı adlar verin (txtAd, txtTutar gibi). Varsayılan özellik Value'dur; yani Nesne.Value yerine yalnız nesne adını yazmak da değeri verir, ancak okunabilirlik için Text ya da Value özelliğini açıkça yazmanız önerilir.

Önemli özellikler​

  • Text: Kutudaki metni okur ya da değiştirir. Her zaman String türündedir.
  • Value: TextBox'ta Text ile aynı içeriği verir; varsayılan özelliktir.
  • MaxLength: Yazılabilecek en çok karakter sayısı; varsayılanı 0'dır ve sınırsız anlamına gelir.
  • MultiLine: True ise kutuya birden çok satır yazılabilir; varsayılanı False'tur.
  • WordWrap: Uzun metnin kutu genişliğinde alt satıra kaydırılıp kaydırılmayacağını belirler.
  • ScrollBars: Kaydırma çubuklarını belirler (yok, yatay, dikey ya da ikisi birden).
  • EnterKeyBehavior: True ise Enter tuşu çok satırlı kutuda yeni satır açar.
  • TabKeyBehavior: True ise Tab tuşu kutuya sekme karakteri yazar, odağı değiştirmez.
  • PasswordChar: Ayarlanan karakter (örneğin yıldız) yazılanın yerine görüntülenir; parola girişi için kullanılır.
  • Locked: True ise kullanıcı metni değiştiremez, ancak metin seçilip kopyalanabilir.
  • Enabled: False ise denetim kullanılamaz ve soluk görünür.
  • TextAlign: Metni sola, ortaya ya da sağa hizalar.
  • SelStart, SelLength, SelText: Seçili metnin başlangıç konumunu, uzunluğunu ve içeriğini verir.
  • ControlSource: Kutuyu bir çalışma sayfası hücresine bağlar.
  • AutoSize: Kutu boyutunu metne göre ayarlar.
  • BackColor, ForeColor, Font: Görünümü belirler.
  • TabIndex: Sekme sırasını belirler.

Önemli yöntemler ve olaylar​

Yöntemler:
  • SetFocus: İmleci kutuya taşır; form açılırken ya da hatalı girişten sonra kullanılır.
  • Copy, Cut, Paste: Seçili metni Pano ile aktarır.
Olaylar:
  • Change: Metin her değiştiğinde çalışır; her tuş vuruşunda tetiklenir.
  • KeyPress: Karakter üreten bir tuşa basıldığında çalışır; KeyAscii değeri 0 yapılırsa tuş yok sayılır.
  • KeyDown, KeyUp: Tuşa basılıp bırakıldığında çalışır; KeyCode ve Shift bilgisini verir.
  • Enter, Exit: Kutu odağı aldığında ya da kaybederken çalışır; Exit olayında Cancel değeri True yapılırsa odak kutuda kalır.
  • BeforeUpdate, AfterUpdate: Değer kutudan kesinleşmeden önce ve sonra çalışır.
  • DblClick, MouseDown, MouseUp: Fare etkileşimlerinde çalışır.
Olay yordamları, denetimin bulunduğu UserForm'un kod modülüne ya da (sayfadaki ActiveX denetimi için) o sayfanın kod modülüne yazılır.

Söz dizimi ve kod ile kullanım​

Bir UserForm'daki metin kutusuna Me.txtAd.Text biçiminde, sayfadaki ActiveX kutuya ise Sayfa.OLEObjects("txtAd").Object.Text biçiminde ulaşılır. Aşağıdaki UserForm kodu yalnız rakam girilmesine izin verir ve kutudaki metni sayfaya yazar:
VBA 14 satır
Private Sub txtAdet_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    ' Yalnız rakamlara ve Backspace tuşuna izin ver
    If KeyAscii < 48 Or KeyAscii > 57 Then
        If KeyAscii <> 8 Then KeyAscii = 0
    End If
End Sub

Private Sub btnKaydet_Click()
    Worksheets("Siparişler").Range("A2").Value = Me.txtAd.Text
    If IsNumeric(Me.txtAdet.Text) Then
        Worksheets("Siparişler").Range("B2").Value = CDbl(Me.txtAdet.Text)
    End If
    Me.txtAd.SetFocus
End Sub
Kutudan gelen değer her zaman metindir. Hesap yapacaksanız önce IsNumeric ile denetleyip CDbl ya da CLng ile sayıya çevirin.

1. Sayfaya metin kutusu ekleme ve özelliklerini okuma​

Bu örnek, sayfaya kodla bir ActiveX metin kutusu ekler, MaxLength değerini ayarlar, metin yazar ve özellik değerlerini B sütununa aktarır. Kodu Alt+F11 ile açtığınız VBA Düzenleyicisi'nde Ekle > Modül (Insert > Module) ile eklediğiniz standart modüle yapıştırın. ActiveX denetimleri Windows masaüstü Excel'de çalışır; örnek temiz kalsın diye kutu işlem sonunda silinir.
VBA 28 satır
Option Explicit

Sub MetinKutusuOlustur()
    Dim ws As Worksheet
    Dim ole As OLEObject
    Dim tb As Object

    Set ws = ThisWorkbook.Worksheets("Metin Kutusu")

    ' Sayfaya ActiveX metin kutusu ekle (konum ve boyut punto cinsindendir)
    Set ole = ws.OLEObjects.Add(ClassType:="Forms.TextBox.1", _
        Left:=250, Top:=20, Width:=150, Height:=22)
    ole.Name = "txtAdSoyad"

    ' Denetimin kendisine Object özelliğiyle ulaşılır
    Set tb = ole.Object
    tb.MaxLength = 30
    tb.Text = "Ayşe Yılmaz"

    ' Özellik değerlerini sayfaya yaz
    ws.Range("B2").Value = tb.Text
    ws.Range("B3").Value = tb.MaxLength
    ws.Range("B4").Value = tb.MultiLine
    ws.Range("B5").Value = Len(tb.Text)

    ' Örnek sayfa temiz kalsın diye kutuyu sil
    ole.Delete
End Sub
TextBox
Formülünü incelemek için bir hücre seçin.
AB
1ÖzellikDeğer
2Metin (Text)Ayşe Yılmaz
3Azami uzunluk (MaxLength)30
4Çok satırlı mı (MultiLine)YANLIŞ
5Karakter sayısı (Len)11
Metin KutusuExcelDepo v1.0.0
Makro çalışınca kutuya yazılan metin B2 hücresine (Ayşe Yılmaz), MaxLength değeri B3'e (30) ve MultiLine özelliği B4'e (YANLIŞ) aktarılır. B5 hücresindeki karakter sayısı 11 olarak hesaplanır. OLEObjects.Add ile eklenen denetime Object özelliği üzerinden ulaşıldığına dikkat edin.

2. Metin kutusundan gelen değeri sayıya çevirme​

Metin kutusunun içeriği her zaman metindir. Bu örnek, A sütunundaki girişleri sırayla bir metin kutusuna yazar, Text değerini okur ve sayıya çevrilebiliyorsa B sütununa sayı olarak, çevrilemiyorsa C sütununa durum bilgisiyle yazar. Kodu standart bir modüle yapıştırın.
VBA 31 satır
Option Explicit

Sub MetinleriSayiyaCevir()
    Dim ws As Worksheet
    Dim ole As OLEObject
    Dim tb As Object
    Dim r As Long
    Dim s As String

    Set ws = ThisWorkbook.Worksheets("Sayı Kontrolü")
    Set ole = ws.OLEObjects.Add(ClassType:="Forms.TextBox.1", _
        Left:=300, Top:=20, Width:=120, Height:=22)
    Set tb = ole.Object

    For r = 2 To 7
        ' Girişi metin kutusuna yaz, sonra Text özelliğinden geri oku
        tb.Text = CStr(ws.Cells(r, 1).Value)
        s = Trim(tb.Text)

        If Len(s) = 0 Then
            ws.Cells(r, 3).Value = "Boş"
        ElseIf IsNumeric(s) Then
            ws.Cells(r, 2).Value = CDbl(s)
            ws.Cells(r, 3).Value = "Sayı"
        Else
            ws.Cells(r, 3).Value = "Geçersiz"
        End If
    Next r

    ole.Delete
End Sub
TextBox
Formülünü incelemek için bir hücre seçin.
ABC
1Girilen MetinSayıDurum
212501250Sayı
3abcGeçersiz
4Boş
5340340Sayı
612aGeçersiz
77575Sayı
Sayı KontrolüExcelDepo v1.0.0
A2'deki giriş sayıya çevrilebildiği için B2 hücresine 1250 yazılır ve C2'de durum Sayı olur. A3'teki giriş için C3 hücresi Geçersiz, boş bırakılan A4 satırı için C4 hücresi Boş değerini alır. Gerçek bir UserForm'da aynı denetimi Exit ya da BeforeUpdate olayında yapıp geçersiz girişte Cancel değerini True yapabilirsiniz.

3. Çok satırlı metin kutusu kullanma​

Bu örnek, MultiLine özelliği True olan bir metin kutusuna sipariş kalemlerini satır satır yazar. Ardından metni Split işleviyle satırlara ayırıp C sütununa yazar. Kodu standart bir modüle yapıştırın.
VBA 35 satır
Option Explicit

Sub SiparisOzetiMetinKutusu()
    Dim ws As Worksheet
    Dim ole As OLEObject
    Dim tb As Object
    Dim r As Long
    Dim i As Long
    Dim metin As String
    Dim satirlar As Variant

    Set ws = ThisWorkbook.Worksheets("Çok Satırlı Metin")
    Set ole = ws.OLEObjects.Add(ClassType:="Forms.TextBox.1", _
        Left:=300, Top:=20, Width:=180, Height:=80)
    Set tb = ole.Object

    ' Birden çok satıra izin ver
    tb.MultiLine = True
    tb.WordWrap = True

    ' Kalemleri satır sonu (vbCrLf) ile birleştir
    For r = 2 To 5
        If r > 2 Then metin = metin & vbCrLf
        metin = metin & ws.Cells(r, 1).Value & " x " & ws.Cells(r, 2).Value
    Next r
    tb.Text = metin

    ' Metin kutusundan geri oku ve satırlara ayır
    satirlar = Split(tb.Text, vbCrLf)
    For i = 0 To UBound(satirlar)
        ws.Cells(i + 2, 3).Value = satirlar(i)
    Next i

    ole.Delete
End Sub
TextBox
Formülünü incelemek için bir hücre seçin.
ABC
1KalemAdetMetin Kutusu Satırı
2Kalem Seti12Kalem Seti x 12
3A4 Kağıt5A4 Kağıt x 5
4Dosya Klasör8Dosya Klasör x 8
5Zımba3Zımba x 3
Çok Satırlı MetinExcelDepo v1.0.0
Metin kutusunun içeriği dört satırdan oluşur ve Split bu satırları C sütununa dağıtır. C2 hücresinde Kalem Seti x 12, C3 hücresinde A4 Kağıt x 5, C4 hücresinde Dosya Klasör x 8 ve C5 hücresinde Zımba x 3 görünür. Gerçek bir formda aynı Text değeri, EnterKeyBehavior özelliği True olan kutuya kullanıcının yazdığı notları da içerebilir.

Kullanırken dikkat edin​

  • Text ve Value aynı değeri verir, ama hep metindir: Kutuya 100 yazsanız bile Text değeri "100" metnidir. Toplama gibi işlemlerden önce CDbl, CLng ya da Val ile çevirin. Val ondalık ayırıcı olarak yalnız noktayı tanır, virgüllü Türkçe girişlerde CDbl kullanmak daha güvenlidir.
  • Boş ve geçersiz girişi denetleyin: Kutu boş bırakıldığında CDbl hata verir. Çevirmeden önce Len(Trim(...)) ve IsNumeric ile denetim yapın.
  • Change olayında dikkatli olun: Change olayı her tuş vuruşunda çalışır. Olay içinde kutunun Text değerini yeniden değiştirirseniz olay tekrar tetiklenir ve döngüye girebilir; gerekirse bir bayrak değişkeniyle olayı kısa süreliğine devre dışı bırakın.
  • KeyPress yapıştırmayı engellemez: KeyPress ile rakam filtresi kurmanız Ctrl+V ile yapıştırılan ya da fareyle sürüklenen metni engellemez. Kesin doğrulamayı Exit, BeforeUpdate olayında ya da kaydet düğmesinde ayrıca yapın.
  • Karakter sınırları: MaxLength değeri 0 ise sınır yoktur. Metni hücreye yazarken bir hücrenin en çok 32.767 karakter tutabildiğini unutmayın.
  • Sayfadaki ActiveX denetimleri: Sayfadaki ActiveX metin kutusu, Tasarım Modu açıkken tıklanıp düzenlenir; kapalıyken kullanılır. Bu denetimler Windows masaüstü Excel'e özgüdür; Excel Online ve Mac sürümlerinde sınırlı çalışır ya da hiç çalışmaz.
  • Şekil olarak eklenen metin kutusu farklıdır: Ekle > Metin Kutusu (Insert > Text Box) ile eklenen kutu bir Shape nesnesidir. Bu kutunun metnine Shapes("Metin Kutusu 1").TextFrame2.TextRange.Text ile ulaşılır; Change gibi olayları yoktur.
  • Parola alanı güvenli değildir: PasswordChar yalnızca ekranda yazılanı gizler. Parolayı kodda açık metin olarak saklamayın; VBA projesi koruması gerçek bir güvenlik sağlamaz.
  • İlgili konular: UserForm, Label, ComboBox, ListBox, CommandButton, CheckBox, MsgBox, InputBox, IsNumeric, CDbl, Val, Split, OLEObjects koleksiyonu, Geliştirici sekmesi ve Tasarım Modu. Çalışma sayfası tarafında metin uzunluğunu ölçmek için UZUNLUK, metni sayıya çevirmek için DEĞER işlevlerine de bakabilirsiniz.
Ö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
12
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst