Merhaba,
Excel belgelerinde eğer çok fazla sayfa var ise ve bu sayfaları silmek bir noktadan sonra zorlaşıyor ise bu makromuz, bu iş için tam biçilmiş kaftan…
Bu makalemizde bir veya daha çok sayfayı hızlıca silebileceğimiz bir makro uygulamasını form ara yüzü kullanarak nasıl silebileceğimizi göstereceğim. Uygulamanın çalışan son hali aşağıdaki gibidir. Silmek istediğimiz sayfaları seçerek, tarayarak, arama yaparak veya tümünü seç gibi işlemleri yaparak seçebilir ve silebiliriz. Çoklu seçim için Ctrl tuşuna basarak seçim yapmak oldukça kolay ve pratiktir.
Uygulamamız için ilk etapta yukarda görülen form’u tasarlıyoruz.
Daha sonra Tümünü Seç, Tümünü Kaldır ve Sil düğmeleri için kodlar yazıyoruz. Form arayüzünü açmak için Crtl+j kısayolu ile formu çağırabiliriz.
Form yüklendiğinde yani aktif olduğunda o Excel belgesinde normalde kaç tane sayfa var ise otomatik olarak listeye eklenmesini istiyoruz.
Bunun için aşağıdaki kod bloğunu kullanırız:
Private Sub UserForm_Activate()
‘Form önyükleme
For Each k In Sheets
ListBox1.AddItem k.Name
Next k
End Sub
Form açıldıktan sonra istediğimiz sayfaları tek tek seçerek, taratarak veya arama yaparak seçip Sil düğmesine tıkladığımızda otomatik olarak silebiliriz.
Tümünü seçmek için aşağıdaki kodu kullanırız. Bu kod çalıştığında form içinde kaç tane sayfa var ise hepsinin onay düğmesi seçili hale gelecektir.
Private Sub CommandButton2_Click()
‘Tümünü seç
For i = 0 To ListBox1.ListCount – 1
ListBox1.Selected(i) = True
Next i
End Sub
Seçili olan tüm sayfalarda Tümünü Kaldır düğmesine tıkladığımızda ne kadar seçili sayfa var ise hepsininde seçimleri iptal olur bunun için aşağıdaki kod bloğunu kullanırız.
Private Sub CommandButton3_Click()
‘Tümünü Kaldır
For i = 0 To ListBox1.ListCount – 1
ListBox1.Selected(i) = False
Next i
End Sub
Eğer arama kutucuğunu kullanarak silme yapmak istersek istediğimiz sayfa adını yazarak listbox içinden arama işlemini yaptırıp seçili olan sayfa veya sayfaları silebiliriz. Bu işlem için aşağıdaki kod bloğunu kullanırız.
Private Sub TextBox1_Change()
‘Arama
Dim i As Integer
Dim j As Integer
With ListBox1
.MultiSelect = fmMultiSelectSingle
.ListIndex = -1
.MultiSelect = fmMultiSelectMulti
For i = 0 To .ListCount – 1
For j = 0 To .ColumnCount – 1
If LCase(InStr(1, .Column(j, i), TextBox1.Text, vbTextCompare)) Then
.ListIndex = i
.Selected(i) = True
End If
Next j
Next i
End With
End Sub
Ve son olarak silmek istediğimiz sayfaları seçtikten sonra Sil düğmesine tıklayarak seçili sayfaları kolaylıkla silebiliriz. Bunun için Sil düğmesinin çift tıkladıktan sonra açılan sayfaya aşağıdaki kodu yazmamız yeterlidir. Böylece ne kadar seçili sayfa var ise silinecektir.
Private Sub CommandButton1_Click()
‘Sayfa veya Sayfaları Silme
On Error Resume Next
Application.DisplayAlerts = False
For k = ListBox1.ListCount – 1 To 0 Step -1
If ListBox1.Selected(k) Then
Worksheets(ListBox1.List(k, 0)).Delete
ListBox1.RemoveItem (k)
End If
Next k
Application.DisplayAlerts = False
End Sub
Yukardaki makro kodları ile işlemimizi çok kolaylaştıracağız. Tabi bu formu çağırmak içinde bir kısayol atamamız gerekir. Diğer türlü sayfa içinden bir düğme koyup onu tıklayarak çağırmak çok mantıklı olmayacaktır. Ama kendimize özel bir makro sekmesi yapıp bu makroyu oraya bir ikon aracılığı ile yerleştirip kullanabiliriz. Tüm bunların yanı sıra kısayol işlemi oldukça basit ve daha kullanışlıdır. Formları çağırmak için modül ekleyim ilgili formu çağırmamız gerekmektedir. Bunun için makromuza bir modül ekliyor ve içerisine aşağıdaki kodu yazıyoruz.
Kodda Forma verdiğimiz ismi Show ederek görüntüleyebiliyoruz.
Aynı şekilde Hide ederek de gizleyebiliriz. Ama bunun için formdaki varsayılan çıkış düğmesinden kapatmayı daha uygun gördüm.
Bir başka makro makalesinde görüşmek üzere,
Hoşçakalın.