Özellik ikonu

Workbooks.Add

İndirme izni yok

Genel Bakış

Workbooks.Add (Workbooks.Add method), Excel'de açık kitaplar koleksiyonuna yeni bir çalışma kitabı ekleyen yöntemdir. Kitap boş bir çalışma kitabı olabileceği gibi bir şablona dayalı da olabilir. Yeni kitap etkin kitap olur ve yöntem, onu bir Workbook nesnesi olarak döndürdüğü için kitabı hemen bir değişkene atayıp kullanabilirsiniz.

Söz dizimi​

Yöntem, Workbooks koleksiyonu üzerinden çağrılır. Parantezli biçimi değişkene atama yaparken, parantezsiz biçimi ise sonucu kullanmadan çağırırken yazarsınız:
VBA 2 satır
Set yk = Workbooks.Add(Template)
Workbooks.Add
  • Template: Yeni kitabın nasıl oluşturulacağını belirler; isteğe bağlıdır. Verilmezse Excel, Application.SheetsInNewWorkbook özelliğinin belirttiği sayıda çalışma sayfası içeren boş bir kitap oluşturur.
Template bağımsız değişkeni iki biçimde verilebilir. Birincisi, var olan bir Excel dosyasının tam yolunu içeren metindir; bu durumda dosya şablon gibi kullanılır ve yeni kitap onun kopyası olarak açılır. İkincisi, aşağıdaki XlWBATemplate sabitlerinden biridir.

Template sabitleri​

Yeni kitabın içereceği sayfa türünü belirlemek için şu sabitler kullanılır:
  • xlWBATWorksheet (-4167): Yalnızca çalışma sayfası içeren kitap oluşturur.
  • xlWBATChart (-4109): Yalnızca grafik sayfası içeren kitap oluşturur.
  • xlWBATExcel4MacroSheet (3): Excel 4.0 makro sayfası içeren kitap oluşturur.
  • xlWBATExcel4IntlMacroSheet (4): Excel 4.0 uluslararası makro sayfası içeren kitap oluşturur.
İşlem arayüzde Dosya > Yeni > Boş çalışma kitabı (File > New > Blank workbook) seçmeye karşılık gelir.

Dönüş değeri ve davranış​

Yöntem yeni oluşturulan Workbook nesnesini döndürür. Yeni kitap hemen etkin kitap olur, yani ActiveWorkbook artık o kitabı gösterir. Kitap henüz diske kaydedilmediği için adı Kitap1, Kitap2 gibi geçici bir addır. Makronuzun çalıştığı kitaba dönmek için kodda ThisWorkbook başvurusunu kullanın; kodun bulunduğu kitabı her zaman bu nesne verir.

Yeni kitabı işiniz bitince Close yöntemiyle kapatabilirsiniz. Değişiklik yapılmış ve kaydedilmemiş bir kitabı kapatırken Excel kaydetme sorusu sorar. Bu uyarıyı makro içinde Application.DisplayAlerts özelliğini False yaparak bastırabilirsiniz; bu durumda kitap kaydedilmeden kapanır ve içindeki veriler kaybolur.

1. Yeni kitap oluşturup bilgilerini okuma​

Aşağıdaki kodu standart bir modüle yapıştırın. Makro yeni bir kitap oluşturur, sayfa sayısı ve adı gibi bilgilerini bu sayfanın B sütununa yazar, ardından yeni kitabı kapatır.
VBA 24 satır
Option Explicit

Sub YeniKitapBilgisi()
    Dim yk As Workbook
    Dim ws As Worksheet

    ' Sonuçların yazılacağı sayfayı önce değişkene alın
    Set ws = ThisWorkbook.Worksheets("Yeni Kitap")

    ' Kaydetme sorusu çıkmasın
    Application.DisplayAlerts = False

    ' Yeni boş kitap oluştur; dönen nesneyi yk değişkenine ata
    Set yk = Workbooks.Add

    ws.Range("B2").Value = yk.Worksheets.Count
    ws.Range("B3").Value = Workbooks.Count
    ws.Range("B4").Value = yk.Worksheets(1).Name
    ws.Range("B5").Value = (ActiveWorkbook Is yk)

    ' Yeni kitabı kapat
    yk.Close
    Application.DisplayAlerts = True
End Sub
Workbooks.Add
Formülünü incelemek için bir hücre seçin.
AB
1BilgiSonuç
2Yeni kitaptaki sayfa sayısı1
3Açık kitap sayısı2
4İlk sayfanın adıSheet1
5Yeni kitap etkin miDOĞRU
Yeni KitapExcelDepo v1.0.0
Yeni kitap varsayılan olarak Application.SheetsInNewWorkbook değeri kadar sayfa içerir; makro bu kitapta 1 sayfa saydı. Kitap açıkken açık kitap sayısı 2 olarak okundu. İlk sayfanın adı Sheet1 çıktı. Yeni kitabın etkin kitap olup olmadığını denetleyen satır DOĞRU sonucunu verdi; yani Workbooks.Add çağrısından hemen sonra ActiveWorkbook yeni kitaba geçmiştir.

2. Veriyi yeni kitaba aktarıp toplam alma​

Bu örnekte sayfadaki aylık satış tablosu yeni bir kitaba aktarılır, yeni kitabın sayfası yeniden adlandırılır ve altına bir toplam formülü eklenir. Kodu standart bir modüle yapıştırın. Makro yeni kitaptaki toplamı ve sayfa adını bu sayfanın C2 ve D2 hücrelerine yazar.
VBA 28 satır
Option Explicit

Sub OzetKitapOlustur()
    Dim yk As Workbook
    Dim kaynak As Worksheet
    Dim hedef As Worksheet

    Set kaynak = ThisWorkbook.Worksheets("Aylık Satış")

    Application.DisplayAlerts = False
    Set yk = Workbooks.Add
    Set hedef = yk.Worksheets(1)

    ' Tablonun değerlerini yeni kitaba aktar (pano kullanılmaz)
    hedef.Range("A1:B7").Value = kaynak.Range("A1:B7").Value

    ' Yeni kitapta sayfayı adlandır ve toplam satırı ekle
    hedef.Name = "Özet"
    hedef.Range("A8").Value = "Toplam"
    hedef.Range("B8").Formula = "=SUM(B2:B7)"

    ' Sonuçları kaynak sayfaya yaz
    kaynak.Range("C2").Value = hedef.Range("B8").Value
    kaynak.Range("D2").Value = hedef.Name

    yk.Close
    Application.DisplayAlerts = True
End Sub
Workbooks.Add
Formülünü incelemek için bir hücre seçin.
ABCD
1AySatış (TL)Yeni Kitap ToplamıSayfa Adı
2Ocak12.500,0091.250,00Özet
3Şubat13.800,00
4Mart15.250,00
5Nisan14.100,00
6Mayıs16.700,00
7Haziran18.900,00
Aylık SatışExcelDepo v1.0.0
Yeni kitapta altı aylık satışların toplamı hesaplandı ve bu sayfanın C2 hücresine 91.250,00 olarak yazıldı. Yeni kitabın sayfa adı Özet olarak okundu. Veriler Copy yerine Value atamasıyla aktarıldığı için panoya hiç dokunulmaz; biçimler ise aktarılmaz, yalnızca değerler taşınır.

3. Her şube için ayrı kitap oluşturma​

Bu örnekte listedeki her şehir için tek sayfalı yeni bir kitap oluşturulur. Kodu standart bir modüle yapıştırın. Template bağımsız değişkeni olarak xlWBATWorksheet verilir; Application.SheetsInNewWorkbook özelliği geçici olarak 1 yapılır ve işlem bitince eski değerine döndürülür. Makro, her kitaba yazdığı başlığı B sütununa, kitaptaki sayfa sayısını C sütununa aktarır.
VBA 30 satır
Option Explicit

Sub SubeKitaplariOlustur()
    Dim ws As Worksheet
    Dim yk As Workbook
    Dim eskiSayi As Long
    Dim i As Long

    Set ws = ThisWorkbook.Worksheets("Şube Listesi")

    ' Mevcut ayarı sakla, yeni kitaplar tek sayfalı olsun
    eskiSayi = Application.SheetsInNewWorkbook
    Application.SheetsInNewWorkbook = 1
    Application.DisplayAlerts = False

    For i = 2 To 4
        ' Yalnızca çalışma sayfası içeren yeni kitap
        Set yk = Workbooks.Add(xlWBATWorksheet)
        yk.Worksheets(1).Range("A1").Value = ws.Cells(i, 1).Value & " Şubesi"

        ws.Cells(i, 2).Value = yk.Worksheets(1).Range("A1").Value
        ws.Cells(i, 3).Value = yk.Worksheets.Count

        yk.Close
    Next i

    ' Ayarları eski haline getir
    Application.SheetsInNewWorkbook = eskiSayi
    Application.DisplayAlerts = True
End Sub
Workbooks.Add
Formülünü incelemek için bir hücre seçin.
ABC
1ŞehirYeni Kitaptaki A1Sayfa Sayısı
2AnkaraAnkara Şubesi1
3İzmirİzmir Şubesi1
4BursaBursa Şubesi1
Şube ListesiExcelDepo v1.0.0
Döngü her şehir için ayrı bir kitap oluşturdu, A1 hücresine şube başlığını yazdı ve kitabı kapattı. İlk kitaptaki başlık Ankara Şubesi, ikincisindeki İzmir Şubesi, üçüncüsündeki Bursa Şubesi olarak okundu. Her kitap tek sayfalı oluşturulduğu için sayfa sayıları sırasıyla 1, 1 ve 1 çıktı. Kodun sonunda SheetsInNewWorkbook ayarı eski değerine döndürüldüğü için sonraki yeni kitaplar etkilenmez.

Kullanırken dikkat edin​

  • Dönen nesneyi değişkene atayın: Yeni kitap etkin kitap olduğu için sonraki satırlarda ActiveWorkbook ya da ActiveSheet kullanmak, kodun çalıştığı kitapla yenisini karıştırmanıza yol açar. Set yk = Workbooks.Add yazıp yeni kitaba daima yk üzerinden, kodun kendi kitabına ise ThisWorkbook üzerinden başvurun.
  • Şablon yolu geçerli olmalı: Template bağımsız değişkenine dosya yolu verirseniz dosya o yolda bulunmalı ve ulaşılabilir olmalıdır; aksi durumda çalışma zamanı hatası alırsınız. Yolu koda sabit yazmak yerine kullanmadan önce varlığını denetlemek daha güvenlidir.
  • Kaydetme sorusu: İçine veri yazılmış yeni kitabı Close ile kapatırsanız Excel kaydetme sorusu gösterir ve makro bu pencerede bekler. İşlem sonunda kitabı kaydetmek istiyorsanız kapatmadan önce kaydedin; atmak istiyorsanız Application.DisplayAlerts özelliğini geçici olarak False yapın ve işlem bitince mutlaka True değerine döndürün.
  • Sayfa sayısı ayarı kalıcıdır: Application.SheetsInNewWorkbook değeri Excel oturumu boyunca geçerlidir ve sonraki tüm yeni kitapları etkiler. Geçici olarak değiştirirseniz eski değeri bir değişkende saklayıp işlem sonunda geri yazın.
  • Birçok kitap oluştururken bellek: Döngüde çok sayıda kitap oluşturuyorsanız her kitabı işi bitince kapatın ve değişkenleri Nothing yaparak serbest bırakın. Açık kalan kitaplar bellek tüketir ve Workbooks.Count değerini şişirir.
  • İlgili konular:
    • Workbooks.Open: Var olan bir dosyayı açar.
    • Workbook.SaveAs: Yeni kitabı bir ad ve konumla kaydeder.
    • Workbook.Close: Kitabı kapatır.
    • Worksheets.Add: Var olan kitaba yeni sayfa ekler.
    • Application.SheetsInNewWorkbook: Yeni kitaptaki varsayılan sayfa sayısını belirler.
    • Application.DisplayAlerts: Uyarı ve soru pencerelerini açar ya da kapatır.
    • ThisWorkbook ve ActiveWorkbook: Kodun kitabını ve etkin kitabı gösteren nesneler.
Ö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
11
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst