DERS - 5 WORKSHEET

YÖNETİMİ

    Excel programında, üzerinde hücrelerin yer aldığı veya başka bir değişle hücrelerin oluşturduğu sayfaya excel Worksheet, yani ‘çalışma sayfası’ denir. Excel üzerinde yaptığımız bütün işlemleri bu çalışma sayfaları üzerinde gerçekleştiririz. Bu sebeplerden ötürü çalışma sayfalarını yönetebilmek, etkin excel ve makro kullanımı bakımından öğrenmemiz gereken bir beceridir.

    Çalışma sayfalarını VBA Editor ile kontrol etmeyi öğrenmek, yapacağımız işlemlerde  sayfalar arasında çok daha rahat hareket edebilmemize olanak verecektir. VBA Editor ve makro konularının giriş kısmını oluşturan temel konulardan olan worksheet yönetimi konusu, düzgün bir şekilde öğrenilirse, ileride yazacağımız makro kodlarımız için veri toplamayı ve bu kodlarla ürettiğimiz veriyi çoğaltıp farklı ortamlara aktarmamıza yardımcı olacaktır. 

    Daha önceden de bahsettiğim gibi makroların yaptığı değişiklikleri geri alamayız. Eğer kodlarımızı yazarken işin en başında sayfa yönetimimizi düzgün bir şekilde yapmazsak, yani verilerin nerelerden alınacağı ve sonuçların nerelere aktarılacağını net bir şekilde belirtmezsek, silmek istemediğimiz bir sayfayı silebilir, kullanılan verinin üzerine yanlış bir veri kopyalayabilir veya işlemlerimizde kullandığımız verilere zarar verebiliriz. Bu nedenle bu konu, VBA Editor kullanmanın temel konularından biri olmakla beraber, sık sık kullanıyor olacağımız ve önem göstermemiz gereken bir konudur.

1- WorkSheet/Çalışma Sayfasına İsim Verilmesi Ve İsminin Değiştirilmesi

    Excel açıldığında genel olarak 3 adet çalışma sayfası eklenmiş olarak gelir. İngilizce  sürüm kullananlarda Sheet1, Sheet2, Sheet3, Türkçe sürüm kullanalarda ise Sayfa1, Sayfa2, Sayfa3 olarak Worksheet alt sol köşesinde bu sayfalar isimlerini görürüz. Bu gördüğünüz isimlere ‘Tab Name’ denir. Tab Name Worksheet’lerin özelliklerinde bulunan 2 adet isimlendirmeden biridir. Tab Name değiştirmek istersek kısaca üzerine sağ tıklayıp yeniden adlandır seçeneğini tıkladıktan sonra istediğimiz ismi klavye aracılığıyla yazabiliriz. 

    Tab  Name ek olarak Worksheet’lere ait ikinci isim ise ‘Code Name’ dir. ‘Code Name’ e worksheet’in gerçek adı da diyebiliriz. Worksheet’lerin adlarını değiştirmeden önce Code Name ve Tab Name aynıdır. Yani CodeName=TabName=Sheet1 veya Sayfa 1 gibi. 

    Şimdi VBA Editor’ü açalım. ‘workbook’ ismi ve altında da 3 adet Worksheet göreceksiniz. Şimdi herhangi bir worksheet(çalışma sayfasına)’e tıklayalım ve ‘Properties’ penceresindeki özellikleri inceleyelim. (Sağdaki resimde olduğu gibi ‘Properties Window’ yani Özellikler Penceresi açılmadıysa ‘F4’e basarak veya ‘View’ sekmesinden ‘Properties Window’ seçeneğini tıklayarak bu pencerenin açılmasını sağlayalım. ) Resimde Properties Penceresinde worksheet’e ait isimlerin gösterildiği alanlar mavi ve yeşil renkli kutucuklarla işaretlenmiştir. Mavi renk kutucuk ‘Code Name’ değerinin, yeşil renk kutucuk ise ‘Tab Name’ değerlerinin bulunduğu alanları göstermektedir.  

Project penceresinde worksheet’e ait iki isim de gösterilmektedir. Lütfen yukarıdaki örneği inceleyiniz.

Üstteki örnekte, renkler vasıtasıyla Code ve Tab Name’i, excel’in worksheet isimlendirmekte nasıl kullandığını görebiliyoruz. İlk isim ‘Code Name’ ve parantez içerisinde yer alan diğer isim ise ‘Tab Name’dir. 

Şimdi bu isimlerin nasıl değiştirildiğini görelim.

    ‘Code Name’ değiştirmek sadece VBA Editor üzerinden yapılabilmektedir. Ve bence bunun sebebi bu ismi herkesin (farklı kullanıcalar tarafından kullanıldığını düşünün herkes sayfalara kendisi için en uygun ismi vermek isteyecektir) değiştirmesinin önüne geçilmek istenmesidir. Veya mümkün olduğu kadar sabit kalması isteniyor da olabilir. Her neyse de worksheet için 2 adet isim koyulmasının arkasındaki sebeple aynı olduğundan eminim. Yani, ileride worksheet isimlerinin değiştirilmesinden kaynakalanabilecek olan karışıklıkların mümkün olduğunca önlenebilmesi. 

‘Code Name’ i değiştirmek istediğimizde yapmamız gereken işlem ‘Properties Penceresi’ nde yer alan (Name) -(Properties penceresinde üstte yer alan)karşılığına istediğimiz ismi yazmaktır. ‘Code Name’ sadece bu şekilde değiştirilebilir.

    ‘Tab Name’ genellikle bize sayfanın ihtiva ettiği veri cinsini veya yapılan işlemi hatırlatan isimlerden oluşur. Önemli olan Sheet1, Sheet2,…,Sheet24 gibi çok sayıda worksheet kullandığımızda mümkün olduğunca hangi sayfada hangi verinin veya tablonun bulunduğunu, worksheet’in ismine bakarak anlayabilmektir. ‘Tab Name’ aynen code name gibi ‘Properties’ penceresinden ya da code name aksine VBA Makro kullanarak da değiştirilebilir. Tab Name’i Makro kullanarak değiştirmek, aşağıdaki örnekte görülebileceği üzere çok kolay bir işlemdir.

Sub WorkSheetIsimVermek()

    Worksheets(“Sheet1”).Name = “Selam”

End Sub

İşte bu kadar basit. Artık Sheet1 isimli worksheet ismi ‘Selam’ olarak değiştirildi.

ÖNEMLİ NOTLAR:

    VBA Editor’de Collection nedir?

    Collection tanım olarak burada: Halihazır workbook içerisindeki bütün worksheet nesneleridir(WorkSheet Collection’). Excel VBA içerisinde faydalandığımız çok sayıda ‘Collection’ vardır. Konularda ilerledikçe farklı ‘Collection’ nesnelerini tanımaya devam edeceğiz.

Kodun incelenmesi:

     Yukarıda bir WorkSheet ismi nasıl değiştirilir adım adım öğrenmiş olduk. Umarım dersin bu kısmıyla alakalı aklınızda en ufak bir soru kalmamıştır. Şu aşamadan sonra siz de worksheet isimlerini kendinize göre değiştirerek alıştırma yapın. Bu konu üzerinde isimlendirmenin nasıl olacağı ile ilgili detay vermememin sebebi, yanlış formatta bir isim girdiğinizde, excel’in zaten sizi uyaracak olmasıdır. Bir kaç yanlış format denedikten sonra siz de isim girererken uymanız gereken çok basit kurallara alışmış olacaksınız.

     Şimdi üzerinde işlem yapacağımız veya sahip olduğu veriyi kullanacağımız worksheet veya worksheet’leri nasıl seçeriz ve aktif hale getiririz onu görelim.

 

2- Active Workbook/Etkin Çalışma Sayfasının Belirlenmesi

    Vba Editor’u açtık, ilk önce bir module sonra da module içinde bir subroutine tanımladık. Sheet1 isimli çalışma sayfasının Range(“A41:G81”) aralığındaki verileri kopyalayıp, Range(“H1:M41”) aralığına yapıştırmak istiyoruz. Çok basit bir işlem. Sadece kopyala ve yapıştır. Peki ya Sheet1 yerine excel de Sheet2 açıksa ve siz farkında olmadan makroyu çalıştırırsanız??? Makro çalışmayla ilgili bir sorun yaşamayacaktır. Hatta siz çalışmamış olmasını isteseniz de, iş işten geçmiş olacaktır. Sheet2 üzerinde makro sizin Sheet1 üzerinde gerçekleşmesini istediğiniz işlemi yapmış ve sizin verileriniz zarar görmüştür. Ve tekrar söylüyorum, makroların gerçekleştirdiği işlemleri geri alamazsınız. Yani Undo düğmesi kullanım dışıdır, tabi bu CTRL+Z kombinasyonununda çalışmadığı anlamına gelir.

    Karanlık bir senaryo ile giriş yaptığımı düşünebilirsiniz, ama gerçek bu ve öyle veya böyle bu hataya çoğu kez düşüyoruz. Hem de en olmaması gereken yerlerde. 

    Eğer bütün verileriniz tek bir sayfadaysa hatta diğer worksheet’leri sildiyseniz sorun yok tabi ki. Ama eğer farklı sayfalardan veri okuyup farklı sayfalarda sonuçları göstermeye çalışıyorsanız, çalıştığınız sayfaları çok net bir şekilde belirtmelisiniz. Zaten aksi durumda yazdığınız makro size yardım etmekten daha çok zarar verecektir. Bu kapsamda yapmamız gereken sayfayı etkin hale getirmek veya seçmektir. Yani ‘Activate’ veya ‘Select’ methodlarını worksheet nesnelerine uygulamaktır. 

    Şimdi farklı sayfaları etkin hale getirmemizde yardımcı olan 2 farklı yöntemi ve aralarındaki çok ufak farkı hep beraber örnekler üzerinde görelim.

.Select-Birden Fazla Sayfa Seçme

.Select Method

.Activate Method

    .Select ve .Activate metodları arasındaki en temel fark; Select metoduyla birden fazla çalışma sayfası seçebilirken .Activate metoduyla yalnızca bir adet seçebiliyor olmamızdır. 

Burada .Select metoduna ait, zorunlu olmayan bir seçenek vardır.  .Select sonrasında, ‘yeni sayfaya geçerken diğer sayfa seçili kalmasın’ şeklinde bir seçenek, True yani evet böyle kalsın olarak seçili vaziyettedir. Haliyle her yeni sayfaya geçerken bir önceki sayfayı bırakıp yeni sayfaya geçeriz. Ancak biz .Select metodundan sonra bir boşluk bırakıp ‘_False’ yazarsak , daha önceki seçilmiş sayfalar da açık kalacak ve program ‘Group) moduna geçecektir. Bunu iki türlü faredebilirsiniz. İlk olarak altta worksheet isimlerinin olduğu sekmeler seçildikten sonra renk değiştirmez, seçili kalır. Ve ya Excel penceresinde  workbook adının olduğu yerde ‘[Group]’ ibaresi çıkar. 

    Etkin sayfayı seçerken Worksheet sayfası nesnesine ait .Select Metodu kullanılabilir. Üstte yer alan kodu kendi bilgisayarınızda F8’e basarak adım adım çalıştırdığınızda, sayfaların belirlediğimiz sırayla tek tek seçildiğini göreceksiniz.

        Etkin sayfayı seçerken Worksheet sayfası nesnesine ait .Activate Metodu kullanılabilir. Üstte yer alan kodu kendi bilgisayarınızda F8’e basarak adım adım çalıştırdığınızda, sayfaların belirlediğimiz sırayla tek tek seçildiğini göreceksiniz.

3- Çalışma Sayfasını Gizlemek ve Görünür Hale Getirmek-Hide/Unhide

    Genellikle veri depoladığımız, verilerin yer aldığı ve ara işlemleri gerçekleştirdiğimiz worksheet/çalışma sayfalarını, çalışma sayfası kalabalığını önlemek açısından, güvenlik amacıyla veya birilerinin kurcalayıp bozmasının önüne geçmek için gizlemeye gerek duyabiliyoruz. Bunu tipik bir Excel sayfasında, en basit şekliyle gizlemek istediğimiz worksheet’in isminin bulunduğu sekmeye sağ tıklayıp ‘Gizle/Hide’ tuşuna basarak gerçekleştirebiliyoruz. Tekrar bu sayfaları da görmek istersek de herhangi bir sekmenin üzerine sağ tıklayıp, ‘Göster/Unhide’ seçeneğini tıklayarak yapıyoruz. Birden fazla gizli sayfa varsa tabi hangisinin gösterilmesini istiyosanız onu seçmeniz gerekiyor ancak çok düz ve basit bir işlem olduğu için, daha önce hiç denememiş olanlar dahi zorlanmadan bu işlemi gerçekleştirebiliyorlar. 

    VBA Editor ile bu işlemi yapmak da yine elle yapmak kadar kolay. Şimdi VBA üzerinde Kod görünümlerini ve açıklamaları inceleyelim.

    Yukarıda aynen excel worksheet üzerinde bir sayfayı nasıl ismi üzerine sağ tıklayarak gizliyorsak, aynı işlemi yapmamızı sağlayan kod satırını paylaştım. Bu kod satırı tam olarak daha önceden bahsi geçmiş olan yazım kurallarına örnek niteliğindedir. 

Worksheets(“Sheet1”)=Nesne

.Visible=Görünülebilirlik yani Çalışma sayfasına ait bir Özellik

=xlSheetHidden Yani (xlSayfaGizlenmiş). Özelliğimizin Almasını İstediğimiz Durum/Hal

    Bu kod ile istediğimiz sayfanın gizlenmesini sağlıyoruz ve eğer istersek yine excel çalışma sayfalarının sekmelere sağ tıklayarak bu sayfayı seçip manuel olarak görünür yapabiliyoruz.

    Resimde de görülebildiği gibi, Sheet3 sekmesine sağ tıkladık, çıkan seçenekler listesinden ‘Unhide’ tuşuna bastık ve açılan ‘Unhide Penceresinde’ gizli olan sayfamız ‘Sheet1’in listede olduğunu gördük. Şimdi bu sayfayı görünür yapmak istiyorsak yapmamız gereken sadece ‘OK’ tuşuna basmak.

    Bu kod satırıyla ise gizlenmiş olan Sheet1 isimli worksheet’i görünür hale getirebiliyoruz. Burada yine aynı yazım kuralını uyguluyoruz. 

 NESNE+PROPERTY=Özelliğin Almasını istediğimiz Durum/Hal

    Soldaki örnekte .Visible özelliğinin gizli olmasını istediğimiz için xlSheetHidden olarak seçim yapmıştık. Burada ise xlSheetVisible olarak .Visible özelliğini değiştirerek sayfayı tekrar görünür hale getirebiliyoruz. 

    Ayrıca ‘ işareti ile #Comment# haline getirmiş olduğumuz kod satırındaki gibi ‘True’ kullanarak, yine sayfayı görünür hale getirebiliriz.

    Sonradan değineceğimiz Boolean kavramının bir konusu olan ‘True’, ya çok kısa bir şekilde değineceğim. Ancak aklınıza tam olarak yatmazsa Boolean konusunda detaylı incelemeyi okuduktan sonra bütün aklınıza takılanların ortadan kalkacağına emin olabilirsiniz.

    .Visible özelliği normal bütün çalışma sayfaların için default olarak açıktır.Yani sizin sayfanın  görünür olması gerektiğini herhangi bir yerde belirtmeniz gerekmez. Burada biz xlSheetHidden dediğimiz zaman bu sefer artık görünür özelliğini değiştirmiş oluyoruz. Ve tekrar bu özelliği açmak için .Visible özelliğini ‘True’ eşitlersek, yani tekrar  default ayarlarını döndürürsek, sayfa da yine default ayarlarındaki gibi görünür vaziyete geliyor.

    xlSheetHidden ve XlSheetVeryHidden seçenekleri, her ne kadar aynı işi yapıyor gibi görünseler de bence ikisini birbirlerinden ayıran çok önemli bir farklılıkları var. Çünkü eğer .Visible özelliğini xlSheetVeryHidden’a eşitlersek, bahsi geçen sayfayı tekrar görünür yapmak istediğimizde bu işlemi sadece VBA Editor’de yapabiliyoruz. Yani normal excel worksheet üzerindeki sayfalara ait sekmelere sağ tıklayıp ‘Unhide’ seçeneğini kullanamıyoruz. xlSheetVeryHidden seçeneğini daha da güzel yapan şey ise ‘Unhide’ seçeneğinin tıklanamayacak(Inactive) durumda olmasıdır. Yani bu yönytemle sayfalarınızı gizlerseniz birisi sizin hazırladığınız sayfaları kurcalamak isteyip, gizli olan sayfaları açmak isterse, gizli bir sayfa olduğunu dahi göremeyektir.

   Gördüğünüz gibi Unhide yazısının rengi, diğer seçeneklere göre daha soluk bir renkte görünüyor. Bunun anlamı ise bu tuşun çalışmasını gerektirecek bir durumun yani ‘Gizliliğin Kaldırılacağı Bir Durumun Olmadığı’dır.

4- Çalışma Sayfası Ekleme-Adding Worksheets

    Çalışmalarınız esnasında yeni sayfa eklemek için VBA Editor’de bir kod yazayım diye düşünmeyeceksiniz. Zaten işlemi elle gerçekleştirmek yeterince basit. İlk önce bunu söyleyebilirim. Örnek vermek gerekirse kimse Sheet3’te yer alan bir tablonun kopyasını hazırlamak için ilk önce makro çalıştırıp yeni sayfa ekleyip sonra gidip yeni sayfaya tablonun kopyasını yapıştırmayacak. Çünkü gördüğünüz gibi böyle bir çabaya gerek yok. Ama eğer bir gün elinizde binlerce satırdan oluşan bir veri tabanı olur da bunları belirli özelliklere göre farklı worksheet’lere ayırmak isteyip, üstelik de otomatik olarak worksheet’lere isim vermek istiyorsanız işte o zaman burada öğrendiklerinizi uygulayabileceğiniz bir durum içerisindesiniz demektir. Bu konu içerisinde böyle bir örnekle ilgi bir çalışmayı da konunun sonuna doğru bulabilirsiniz.

 

    Worksheet, bizim excelde devamlı gördüğümüz hücrelerden oluşan sayfaları tanımlar. Sheet ise hem worksheet’leri hem chart’ları yani her tip çalışma sayfasını ifade eder. ‘.Count’ ise çalışma sayfalarının sayısını veren bir özelliktir. Zaten kelime anlamı da say-mak’tır.

Konuyla ilgili hem çok basit hem de konuyu anlatmak bakımından çok güçlü bir örnekle devam edelim. Ama daha öncesinde bize subroutine içerisinde tanımladığımız veya kullandığımız her türlü veri, değişken, hesap vb değerlerini ve tiplerini anlık olarak gösterebilen ‘Locals’ penceresini açalım. Bunun için View–>Locals Window’a tıklıyoruz. Açılan ‘Locals’ penceresini istediğimiz gibi kenarlarında tutup sağa sola çekiştirebilir, gizleyebilir veya bir kenara sabitleyebiliriz. Şimdi local penceresini de açtığımıza göre örneğimize ait görseli inceleyelim.

    Örnek subroutine’de, ilk önce worksheet için ws, sheet için sh kısaltması kullanıldı. Sonradan bu kısaltmalar tam sayı olarak kullanacağı için ‘Integer’ veri tipinde birer değişken olarak tanımlandı. Ve bu değişkenlerin alacağı değerlerin hesaplanması için ‘.Count’ Property kullanıldı. 

    Yukarıda da belirtildiği gibi worksheet eğer ‘.Count’ Property’si ile kullanılırsa sadece worksheetleri sayar ama sheet ‘.Count’ property ile kullanılırsa, workbook içerisinde açılmış olan bütün excel sayfalarını sayar. Örnekte de bu durumu ‘Locals Window’ yardımıyla gösterdik. Gördüğünüz gibi ws’in değeri sadece worksheet’lerin sayısı olan 11’i, sh’nin değeri ise workbook’ta yer alan bütün excel sayfalarının sayısı olan 13 rakamını verdi. 

Burdan çıkartmamız gereken ders ise her ne kadar benzer görünseler de sheet ve worksheet’in temel düzeyde ciddi farklılıkları vardır.

    Worksheet/Çalışma sayfası eklemek için kullanmamız gereken metod ‘.Add’ metodur. Bu metod sayesinde başka hiçbir şey yazmadan otomatik olarak sayfaların en başına bir worksheet eklemiş olursunuz. Ben en öne değil, en arkaya sayfa eklemek istiyorum derseniz de konunun devamında bu sorunuzun da cevabını bulabileceğinizi söyleyebilirim. 

    Bu komutu çalıştırdıktan sonra sıradaki numarayla bir adet worksheet’in eklendiğini sayfaların olduğu bölümde görebileceksiniz. Ayrıca her eklenen sayfayı VBA Editor Project Penceresinde de görülecektir.

    Optional Argument: Metodun farklı şekilde çalışmasını sağlayacak olan seçeneklerdir. Metod siz bu tercihleri yapmasanız da çalışacaktır. Zaten ‘Optional Argument’ olayı da budur. Şimdi örnekte çok net bir şekilde ‘Optional Arguments’lar neymiş, görevleri nelermiş, metodun çalışmasını nasıl etkilerlermiş hepsini göreceğiz.

    .Add metodunu yazdıktan sonra ‘space’ ile bir boşluk bıraktığınız anda ‘Optional Arguments’ sarı şerit içerisinde yukarıdaki örnekteki gibi kodun devamında ortaya çıkacaktır. Yanlış anlaşılma olmaması açısından belirtmek isterim Sarı şerit ve içinde yazanlar dışında, kırmızı kutular içerisindeki rakamları ve kelimelerin Türkçelerini örneğin daha iyi anlaşılabilmesi için ben ekledim. 

    Bu seçenekler bizim metodun çalışma şekline müdehale edebilme yetkisi verir. Yukarıda belirtmiştim, normalde .Add metodunu (F5 veya Run Tuşu)çalıştırırsanız yeni eklenilen sayfa en başa gelecektir. Bu metodun (default) önceden tanımlanan ayarı bu şekildedir. Ancak eklenecek sayfayı başka bir sayfanın önüne veya arkasına, hatta bütün sayfaların en sonuna eklemek istiyorsak o zaman bu ‘Optional Arguments’i kullanmamız gereklidir. Her ne kadar bu seçeneklerin Türkçelerini yukarıdaki örnek üzerine eklemiş olsam da burada daha detaylı bir şekilde tekrar işleyerek konuyu biraz daha rahat anlaşılır bir şekilde işleyeceğiz.

Not: Eğer girilmesi istenilen bir ‘Argument’ köşeli parantez içerisindeyse, belirtilmesi mecburi değildir.

Before

Kelime anlamı öncedir. Yani sadece anlamı dahi bize aslında bu ‘argument’ in ne olduğunu çok net anlatıyor. Burada ‘Before’a karşı yeni eklencek sayfanın, hangi çalışma sayfasının önünde yer almasını istiyorsak onu giriyoruz. Örnek olarak; 

Worksheets.Add Before:=Worksheets(“Sheet2”) şeklinde kod yazdığımızda, yeni gelen sayfa Sheet2 nin önüne yerleşecektir. 2 farklı şekilde bu ‘optional Arguments’ kullanabiliriz. İlk Yöntem virgül yöntemi. Yani bir boşluk bıraktık ve optional arguments karşımıza çıktı. Koyu renkle yazılan aktif olan ‘Optional Argument’tir. ‘Before’ argumenti ilk sırada olduğu için direk seçili durumdadır. Yani ‘Before:=’ yazmadan direk olarak ‘Worksheet(“Sheet2”)’ yazarsak, Before argument zaten aktif olduğu için, onun için bir seçenek sunmuş oluruz. Ama eğer before değil de [Type] için bir değer yazacaksak, o zaman işte boş bıraktığımız her argument için virgüle basarız. Siz de deneyin ve göreceksiniz ki her virgüle basmanızla birlikte bir sonraki argument in rengi koyulaşacak yani aktifleşecek. Virgül kavramı kolay olarak gözükebilir. Ancak bazen kafa karışıklığına yol açabilir. O yüzden en doğru yol, ‘argument’in adını yazıp ‘:=’ işaretiyle, eşitlemektir. 

Örnekte görüldüğü gibi [Type] Argument’i virgülle de seçebiliriz. Ya da daha net olarak Argument adını yazarak da seçebiliriz. Benim tavsiyem argumentin adı ile işlemi gerçekleştirmektir.

Yukarıda Worksheet eklemenin 2, chart eklemenin bir yolu gösterilmektedir. Ve bu yazım kuralıyla beraber kullanılan veri tipleri de gösterilmiştir. Enumeration ve constant gibi hiç görmediğiniz terimleri de göreceksiniz. Ancak onlarla ilgili endişelenmenize gerek yok. Zamanı geldiğinde sadece onlarla ilgili olan konuları da işleyeceğiz.

Örnekte dikkat etmenizi istediğim bir şey var. O da bizim istediğimiz sayıda argumenti tanımlayabilecek olmamız. Gördüğünüz gibi hem eklenecek sayfamızın hangi sayfadan önce ekleneceğini, hem de hangi tip bir çalışma sayfası eklemek istediğimizi bu şekilde tanımlayabiliyoruz.

 

    Bahsettiğimiz gibi .Add metodu default yani önceden ayarlı olarak en başa sayfa eklemektedir. Biz ise en sona eklemek istiyoruz. Bu durumda bizim kullanmamız gereken yöntem :Index numarası ile yani sayfa numarasını girip sonrasında after:=Sheet(5) olarak kodumuzu yazmak. Sheet isimleri değişmiş olabilir. Bu bir sorun yaratmaz. Çünkü önemli olan toplam kaç adet sayfanın o Workbook’ta açık olduğudur. 

    Biz her seferinde toplam çalışma sayfası sayısını sayamacağımıza veya saymak istemeyeceğimize göre, bu görevi sadece bir satıdan oluşan bir kod ile excelin gerçekleştirmesini sağlayabiliriz. Şimdi aşağıdaki örneği inceleyelim.

Gördüğünüz gibi kendimiz gözle sayıp index yani sıra numarasını kendimiz yazacağımıza, ‘.Count’ Property kullanarak otomatik olarak kaç adet sheetİn workbook içerisinde açık olduğunu görebiliyoruz. Bu sayede her ne kadar çalışma sayfası açık olursa olsun, ister silinsin ister eklensin, bu kod çalıştırıldığı sürece yeni eklenecek olan sayfa en sona eklenecektir.

    İlk Alt konumuz olan Ön Bilgi kısmında sheet ve worksheet nesnelerinin ‘.Count’ ile ilgili verdikleri sonuçları ve nedenlerini incelemiştik. Detaylı bilgi arzu eden yine aynı alt konu başlığını inceleyebilir.

5- Display Alerts İptal Etme ve Yeniden Çalıştırma

    Excel workbook üzerinde herhangi bir çalışma sayfası silmek istediğinizde karşımıza ilk önce:’Çalışma sayfasını silmek geri alınabilir bir işlem değildir. Beraberinde çalışma dosyası içerisindeki verileri de silersiniz. Devam etmek ister misiniz?’ gibi yaptığınız seçimi son bir defa sorgulayan bir mesaj penceresi açılır. Siz ‘OK’ e basarsınız ve sayfa silinmiş olur. Bu açılan pencereye Alarm Penceresi denir. Şimdi bir değil de düzinelerce çalışma sayfası sileceğinizi, hatta bu işlemi makro ile yaptığınızı düşünün. Her ne kadar kod çalışsa da size her çalışma sayfası silinmeden önce bu uyarıyı verecektir. Ve sizde ‘OK’ basmak zorunda kalacaksınız. İşte bu iş yükünden kurtulmak adına subrountine içerisinde bu uyarı mesajlarını kapatıp, subroutine sonunda da tekrar geri açabiliyoruz. 

 

    1-Subroutine başlarken ilk önce uyarı mesajlarını kapatıyoruz. 

    2-Sonra kodumuz yazıyoruz. Ve bu kod en son çalışma sayfasını silen koddur. 

    3-Sonra işimiz bittiğinde ise uyarı mesajlarını tekrar açıyoruz. 

Bu sayede silmek istediğimiz her çalışma sayfası için onay vermek zorunda kalmıyoruz.

 

6- Çalışma Sayfalarının Silinmesi-Deleting Worksheets

    Sayfa eklemek kadar silmek de makrolar tarafından yapılabilir. Sağ tarafta farklı şekillerde farklı çalışma sayfalarının nasıl silinebildiğine dair örnekleri görüyoruz. Şimdi madde madde yandaki subroutine’i inceleyelim.

1-Çalışma sayfalarını silme işlemine başlamadan hemen önce Uyarı Mesajlarını kapatıyoruz.

2-Sayfa numarası yani indeks kullanarak sayfanın nasıl silinebileceğini görüyoruz.

3-Sayfa ismini kullanarak çalışma sayfasını siliyoruz.

4-Chart tipindeki bir çalışma sayfasının silinmesini Sheets Collection kullanarak yapıyoruz.

5-Chart tipindeki çalışma sayfasının silinmesi için uygulanan diğer bir yöntem.

6- Workbook içerisinde açık olan bütün ‘Chart’ tipindeki sayfaların silinmesi. Bu kod bütün tablo sayfalarını siler. O yüzden kullanırken dikkatli olunmalıdır.

 7-Bütün worksheet’ler silinir. Başka bir tip çalışma sayfası açık değilse, bütün workbook’un silinmesi anlamına gelir.

8-En sondaki çalışma sayfasını siler. 

9- Silme işlemini tamamladığımız için artık Uyarı Mesajlarını açabiliriz. Böylece farklı bir noktada ihtiyacımız olduğunda bizi yine uyarabilsin.

Bu farklı yöntemlerle istediğiniz sayfayı silebilirsiniz. Daha önceden de bahsettiğim gibi önemli olan yazım kurallarına uymaktır. Tümden gelen bir yapı olduğunu unutmayın. Yani buradaki örnek gibi. Collection->Obejct+.Method


7- Açık Olan Bir Çalışma Sayfasının Kopyalanması

    Çalışma sayfaları ile yapılan işlemlerin arasında, sayfaların kopyalanması da önemli bir yere sahiptir. Bu bölümde yine örnek olarak yazdığımız kod üzerinden gideceğiz. 

    Sağdaki örnekte farklı yollarla nasıl bir sayfanın kopyalanacağını ve yapoştırılacağnı görüyoruz. Şimdi  madde madde bu örnek üzerinden devam edelim.

    1-Bu yöntemde Worksheets Collection kullanarak Sheet1 isimli sayfayı bütünüyle ‘.Copy’ metoduyla kopyalıyoruz. Normal koşullarda kopyaladığımız sayfayı nereye yapıştırmayı istediğimizi belirtmemiz gerekmektedir. Yani burada da bir ‘Optional Argument’ olayı söz konusudur. Gördüğünüz gibi burada biz yapıştırmak için herhangi bir adres girmedik. Peki VBA Editor burada bu işlemi nasıl ele alıyor. İlk olarak sadece kopyalama işlemi için komut vermiş olduğumuz ve yapıştırılacak adresi belirtmediğimiz için VBA kendi default ayarlarından kaynaklı olarak bir adet yeni Workbook açıyor ve bu sayfayı da bu yeni açtığı workbook içerisine yapıştırıyor. Kısaca bizim başladığımız işi VBA Editor tamamlıyor. Kopyalama ve yapıştırma işlemi VBA Editor sayesinde gerçekleşmiş oluyor.

    2-Bu yöntemde bu sefer ‘Optional Argument’ olarak yapıştırma adresini de kodun devamına ekliyoruz. Artık kopyalanan sayfamız, aynı workbook içerisinde yer alan ‘Sheet3’ içerisine yapıştırılacaktır

    3-Bu örnekte bu sefer aynı workbook değil, açık olan farklı bir workbook’taki bir sayfaya kopyalanan sayfanın yapıştırılmasını görüyoruz.

  4-Workbook’a yeni worksheet ekleme konusunda en sona sayfa ekleme işlemi gibi, kopyalanan sayfa da yine worksheet listelesinin en sonuna yapıştırılabilir. Bu kod satırında da bu işlemin nasıl yapıldığını görüyoruz.

 5-Worksheet Collection kullanmadan, worksheet’in Code Name’ini atıf yaparak da aynı şekilde kopyalama ve yapıştırma işlemini gerçekleştirebiliyoruz.

   6-Kopyalamanın yanında eğer sayfayı taşımak istersek de bu sefer ‘.Move’ metoduyla bu işlemi gerçekleştirebiliyoruz. ‘Optional Argument’ olarak kopyalama ve yapıştırma işlemindeki aynı seçenekleri kullanabiliyoruz.

Dünya Çapında Araştırmacılara Ait Çalışmaları Okumak İsterseniz https://www.researchgate.net/profile/Ender_Dagdelen adresini Ziyaret Edebilirsiniz. Ana Sayfaya Dönmek İsterseniz De Aşağıdaki Tuşu Tıklayınız.

Herkese İyi Çalışmalar…

Soru ve Öneriler İçin;

[email protected]