Özellik ikonu

ThisWorkbook

İndirme izni yok

Genel Bakış

ThisWorkbook (Application.ThisWorkbook), VBA kodunun içinde bulunduğu çalışma kitabını gösteren salt okunur bir özelliktir ve bir Workbook nesnesi döndürür. Başka bir kitap etkinleştirilse bile kod her zaman kendi kitabına başvurabilir; bu yüzden makro yazarken en güvenli başvuru yollarından biridir. Aynı ad, Proje Gezgini'ndeki ThisWorkbook kod modülünün de adıdır ve Workbook_ olayları bu modüle yazılır.

Söz dizimi​

Özellik, Application nesnesine bağlıdır; Excel içinden çalışan kodda Application yazmak zorunlu değildir.
VBA 3 satır
Set kitap = Application.ThisWorkbook
' Kısa yazım (aynı sonucu verir)
Set kitap = ThisWorkbook
  • Application (ifade): Application nesnesini temsil eden ifade; isteğe bağlıdır, yazılmazsa içinde bulunulan Excel uygulaması kullanılır.
  • Dönüş değeri: Kodun bulunduğu çalışma kitabını gösteren bir Workbook nesnesi. Özellik salt okunurdur, yani ThisWorkbook değerine başka bir kitap atayamazsınız.
  • Parametre: Özelliğin parametresi yoktur; sonrasında Worksheets, Names, Close gibi Workbook üyelerini nokta ile kullanırsınız.

ThisWorkbook ile ActiveWorkbook farkı​

ActiveWorkbook, o anda ekranda etkin olan kitabı gösterir ve kullanıcı başka bir pencereye geçtiğinde değişir. ThisWorkbook ise makronun yazıldığı kitabı gösterir ve etkin pencere değişse de aynı kalır.
  • Tek kitapla çalışırken: İkisi çoğunlukla aynı kitabı gösterir.
  • Birden çok kitap açıkken: Başka bir kitabı Workbooks.Open ile açıp etkinleştirdiğinizde ActiveWorkbook o kitaba geçer, ThisWorkbook ise makro kitabınız olarak kalır.
  • Eklenti (.xlam) içinde: ThisWorkbook eklentinin kendi dosyasını gösterir; kullanıcının üzerinde çalıştığı kitap için ActiveWorkbook kullanılır.
Kodun kendi sayfalarına, adlarına ve verilerine dokunacağı durumlarda ThisWorkbook, kullanıcının o an açtığı kitaba işlem yapılacağı durumlarda ActiveWorkbook tercih edilir.

Önemli üyeler ve kullanım yerleri​

ThisWorkbook bir Workbook nesnesi döndürdüğü için o nesnenin tüm üyelerini kullanabilirsiniz:
  • Worksheets / Sheets: Kitaptaki sayfalara adla ya da sıra numarasıyla erişim sağlar.
  • Names: Kitaptaki tanımlı adları verir.
  • Name: Kitabın dosya adını verir.
  • Saved: Kitapta kaydedilmemiş değişiklik olup olmadığını belirtir.
  • Save, Close, Activate: Kitabı kaydeden, kapatan ya da etkinleştiren yöntemlerdir.

ThisWorkbook modülü ve olay yordamları​

Visual Basic Düzenleyicisi'ni Alt+F11 ile açın; Proje Gezgini'nde (Project Explorer) Microsoft Excel Nesneleri > ThisWorkbook öğesine çift tıklayın. Kitap düzeyindeki olay yordamları bu modüle yazılır; standart modüle yazılırsa çalışmaz.
  • Workbook_Open: Kitap açıldığında çalışır.
  • Workbook_BeforeClose: Kitap kapanmadan önce çalışır.
  • Workbook_SheetChange: Kitaptaki herhangi bir sayfada hücre değeri değiştiğinde çalışır; değişen sayfa Sh, hücre aralığı Target parametresiyle gelir.
  • Workbook_SheetSelectionChange: Herhangi bir sayfada seçim değiştiğinde çalışır.
Bu modülün içinde yazdığınız kodda ThisWorkbook ya da Me aynı kitabı gösterir.

1. Kendi kitabınızdaki sayfaya güvenle yazma​

Satış listesinde her satırın tutarını adet ile birim fiyatı çarparak hesaplamak istiyorsunuz. Kodu Alt+F11 ile açtığınız Visual Basic Düzenleyicisi'nde Ekle (Insert) > Modül (Module) ile eklediğiniz standart modüle yapıştırın. Kod, hangi kitap etkin olursa olsun ThisWorkbook üzerinden kendi kitabındaki sayfaya ulaşır.
VBA 16 satır
Option Explicit

Sub TutarHesapla()
    Dim ws As Worksheet
    Dim son As Long, i As Long

    ' Etkin kitap ne olursa olsun, kodun bulunduğu kitaptaki sayfa alınır
    Set ws = ThisWorkbook.Worksheets("Satış Özeti")

    ' A sütunundaki son dolu satırı bul
    son = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    For i = 2 To son
        ws.Cells(i, "E").Value = ws.Cells(i, "C").Value * ws.Cells(i, "D").Value
    Next i
End Sub
ThisWorkbook
Formülünü incelemek için bir hücre seçin.
ABCDE
1AyÜrünAdetBirim FiyatTutar
2OcakDefter12015,501.860,00
3OcakKalem3004,251.275,00
4ŞubatDefter9015,501.395,00
5ŞubatDosya6022,001.320,00
6MartKalem2504,251.062,50
7MartKlasör4038,751.550,00
Satış ÖzetiExcelDepo v1.0.0
Makro çalıştıktan sonra Tutar sütunu doldurulur; örneğin ilk satırın tutarı 1.860,00, ikinci satırın tutarı 1.275,00 olur. Her satırda adet ile birim fiyat çarpılmıştır. Sayfaya ActiveWorkbook yerine ThisWorkbook üzerinden ulaşıldığı için, makro çalışırken başka bir kitap etkin olsa bile veriler doğru kitaba yazılır.

2. Kitap bilgilerini okuma ve ActiveWorkbook ile karşılaştırma​

Aşağıdaki makro, ThisWorkbook'un döndürdüğü Workbook nesnesinden bilgi okur ve sonuçları B sütununa yazar. Kodu standart bir modüle yapıştırın. Son satırda Is işleciyle ThisWorkbook'un etkin kitapla aynı nesne olup olmadığı sınanır.
VBA 15 satır
Option Explicit

Sub KitapBilgisi()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Kontrol")

    ' Kitaptaki çalışma sayfası sayısı
    ws.Range("B2").Value = ThisWorkbook.Worksheets.Count

    ' Kitaptaki ilk sayfanın adı
    ws.Range("B3").Value = ThisWorkbook.Worksheets(1).Name

    ' ThisWorkbook ile etkin kitap aynı nesne mi?
    ws.Range("B4").Value = (ThisWorkbook Is ActiveWorkbook)
End Sub
ThisWorkbook
Formülünü incelemek için bir hücre seçin.
AB
1KontrolSonuç
2Çalışma sayfası sayısı3
3İlk sayfanın adıSatış Özeti
4ThisWorkbook etkin kitap mı?DOĞRU
KontrolExcelDepo v1.0.0
Kitaptaki sayfa sayısı 3, ilk sayfanın adı Satış Özeti olarak yazılır. ThisWorkbook ile ActiveWorkbook aynı kitabı gösteriyorsa B4 hücresinde DOĞRU sonucunu görürsünüz. Başka bir kitap etkinken makroyu çalıştırırsanız bu sınama Yanlış (False) döner; çünkü ThisWorkbook her zaman kodun bulunduğu kitaptır.

3. ThisWorkbook modülünde olay yordamı​

Stok sayfasında Adet sütununa (B) değer girildiğinde Tutar sütununun (D) otomatik hesaplanmasını istiyorsunuz. Aşağıdaki kodu Proje Gezgini'nde ThisWorkbook öğesine çift tıklayıp açılan kod penceresine yapıştırın; olay yordamı kitaptaki tüm sayfalar için çalıştığından sayfa adı kontrol edilir. Kod, Tutar yazılırken olayın yeniden tetiklenmemesi için Application.EnableEvents özelliğini geçici olarak kapatır.
VBA 22 satır
Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim alan As Range
    Dim hucre As Range

    ' Yalnızca Stok Takip sayfasındaki değişiklikler işlenir
    If Sh.Name <> "Stok Takip" Then Exit Sub

    Set alan = Intersect(Target, Sh.Range("B2:B11"))
    If alan Is Nothing Then Exit Sub

    On Error GoTo Bitir
    Application.EnableEvents = False

    For Each hucre In alan.Cells
        Sh.Cells(hucre.Row, "D").Value = hucre.Value * Sh.Cells(hucre.Row, "C").Value
    Next hucre

Bitir:
    Application.EnableEvents = True
End Sub
ThisWorkbook
Formülünü incelemek için bir hücre seçin.
ABCD
1ÜrünAdetBirim FiyatTutar
2Çay Bardağı1012,50125,00
3Tabak Seti2585,002.125,00
4Cezve847,90383,20
Stok TakipExcelDepo v1.0.0
Örnekte Adet hücreleri başta boştur; kurulum makrosu bu hücrelere değer yazdığında Workbook_SheetChange olayı tetiklenir ve Tutar sütunu, adet ile birim fiyatın çarpımıyla dolar. Sayfaya elle bir adet girdiğinizde de aynı şey olur. Olay yordamı ThisWorkbook modülünde olduğu için kitaptaki her sayfa için çalışır; bu yüzden Sh.Name ile yalnızca Stok Takip sayfası işlenmiştir.

Kullanırken dikkat edin​

  • ThisWorkbook yalnızca kodun bulunduğu kitabı gösterir: Başka bir dosyayı yönetecekseniz onu bir Workbook değişkenine atayın (örneğin Workbooks koleksiyonundan ya da Workbooks.Open sonucundan). ThisWorkbook başka bir kitaba çevrilemez.
  • Sayfa başvurularında ThisWorkbook kullanın: Worksheets ya da Range başvurusunu kitap belirtmeden yazarsanız Excel etkin kitabı kullanır. Birden çok kitap açıkken bu, verilerin yanlış kitaba yazılmasına yol açabilir. Kendi sayfalarınız için başvuruyu ThisWorkbook.Worksheets ile başlatmak güvenlidir.
  • Eklentilerde davranış: Kod bir Excel eklentisinde (.xlam) çalışıyorsa ThisWorkbook eklenti dosyasının kendisidir; kullanıcının açık kitabı değildir. Kullanıcı kitabı için ActiveWorkbook kullanın ve işlemden önce null olup olmadığını denetleyin.
  • Olay yordamlarının yeri: Workbook_Open, Workbook_SheetChange gibi olay yordamları yalnızca ThisWorkbook modülünde çalışır. Standart modüle yazılırsa sıradan bir yordam olur ve olay oluştuğunda tetiklenmez. Olayları dışarıdan çağırmak yerine içinde değişiklik yapan yordamlarda Application.EnableEvents özelliğini kapattıysanız hata durumunda da yeniden açtığınızdan emin olun.
  • Kod adı ile ThisWorkbook: ThisWorkbook, Excel'in kitaba verdiği sabit kod adıdır ve sayfa kod adları (Sheet1 gibi) gibi kitap adından bağımsızdır. Kitabı yeniden adlandırsanız ya da farklı kaydetseniz de kod içindeki ThisWorkbook başvurusu çalışmaya devam eder.
  • İlgili konular:
    • ActiveWorkbook: Etkin çalışma kitabını döndüren özellik.
    • Workbooks: Açık tüm kitapların koleksiyonu; Open ve Add yöntemleri.
    • Workbook nesnesi: Name, Saved, Close, Save gibi kitap üyeleri.
    • Worksheets ve Sheets: Kitaptaki sayfa koleksiyonları.
    • Workbook_Open ve Workbook_SheetChange: ThisWorkbook modülündeki kitap olayları.
    • Application.EnableEvents: Olayların geçici olarak kapatılması.
    • ActiveSheet ve Me: Etkin sayfa ile içinde bulunulan modülün nesnesi.
Ö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
14
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst