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.
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.
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.
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.
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.
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 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.
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.| A | B | |
|---|---|---|
| 1 | Bilgi | Sonuç |
| 2 | Yeni kitaptaki sayfa sayısı | 1 |
| 3 | Açık kitap sayısı | 2 |
| 4 | İlk sayfanın adı | Sheet1 |
| 5 | Yeni kitap etkin mi | DOĞRU |
Yeni KitapExcelDepo v1.0.0
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.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ay | Satış (TL) | Yeni Kitap Toplamı | Sayfa Adı |
| 2 | Ocak | 12.500,00 | 91.250,00 | Özet |
| 3 | Şubat | 13.800,00 | ||
| 4 | Mart | 15.250,00 | ||
| 5 | Nisan | 14.100,00 | ||
| 6 | Mayıs | 16.700,00 | ||
| 7 | Haziran | 18.900,00 |
Aylık SatışExcelDepo v1.0.0
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.| A | B | C | |
|---|---|---|---|
| 1 | Şehir | Yeni Kitaptaki A1 | Sayfa Sayısı |
| 2 | Ankara | Ankara Şubesi | 1 |
| 3 | İzmir | İzmir Şubesi | 1 |
| 4 | Bursa | Bursa Şubesi | 1 |
Şube ListesiExcelDepo v1.0.0
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.