İçi Boş Modülleri Silme

hakki83

Altın Üye
Katılım
30 Eylül 2021
Mesajlar
533
Excel Vers. ve Dili
Excel 2016 Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
30-09-2026
Merhaba

Bazı dosyalarımda 30’dan fazla modül var ve sonradan içlerini sildiğim için bir çoğunun içi boş.

Bunların üzerindeyken Delete’yle silebiliyor olsak çok kolay olurdu doğrusu. Ama yapamıyoruz. Belki de birçok kullanıcı bundan muzdariptir.

Boş modüller yüzünden içinde kod olan modülleri bulmak için çok uğraşıyorum.

Böyle içi boş olan modülleri kodla silebilir miyiz?

Fakat bazı modüllerin içinde, gözle görünmeyen Space veya Tab karakteri kalmışsa; O MODÜLLERİ DE SİLMELİ.

Bazı modülleri de sırf içine notlarımı yazmak için kullanıyorum. Dolayısıyla içleri sadece yeşil renkli satırlarla dolu. O MODÜLLERİ SİLMEMELİ.

…………

Örnek dosyaya göre Modül4 ve Modül6 kalmalı, gerisini silmeli.
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,160
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Bu tarz kodlara merakı olanlar için güzel bir link paylaşıyorum.


Sizin sorunuza gelince aşağıdaki kod ile bahsettiğiniz modülleri silebildim.

C++:
Option Explicit

Sub Delete_All_Blank_Module()
    Rem Kodun çalışması için kod editöründe Tools-References bölümünden "Microsoft Visual Basic For Applications Extensibility X.X" seçeneğinin seçili olması gerekir.
    Rem Kodun çalışması için Dosya-Seçenekler-Güven Merkezi-Güven Merkezi Ayarları-Makro Ayarları menüsünden "VBA projesi nesne erişimi modeline güven" seçeneğinin seçili olması gerekir.
    
    Dim VBProj As VBIDE.VBProject
    Dim VBComp As VBIDE.VBComponent
    Dim VBA_Code_Line As String
    Dim X As Long, My_Check As Boolean

    Set VBProj = ActiveWorkbook.VBProject
    
    For Each VBComp In VBProj.VBComponents
        If VBComp.Type = vbext_ct_StdModule Then
            My_Check = True
            If VBComp.CodeModule.CountOfLines = 0 Then
                VBProj.VBComponents.Remove VBComp
            Else
                For X = 1 To VBComp.CodeModule.CountOfLines
                    VBA_Code_Line = VBA.Trim$(VBComp.CodeModule.Lines(X, 1))
                    If VBA.Len(VBA_Code_Line) > 0 Then
                        If VBA.Left$(VBA_Code_Line, 6) <> "Option" Then
                            If VBA.Left$(VBA_Code_Line, 3) <> "Sub" Then
                                If VBA.Left$(VBA_Code_Line, 3) <> "Dim" Then
                                    If VBA.Left$(VBA_Code_Line, 6) <> "Public" Then
                                        If VBA.Left$(VBA_Code_Line, 6) <> "Global" Then
                                            If VBA.Left$(VBA_Code_Line, 7) <> "Private" Then
                                                If VBA.Left$(VBA_Code_Line, 8) <> "Property" Then
                                                    If VBA.Left$(VBA_Code_Line, 8) <> "Function" Then
                                                        If VBA.Left$(VBA_Code_Line, 5) <> "Const" Then
                                                            If VBA.Left$(VBA_Code_Line, 3) <> "Rem" Then
                                                                My_Check = False
                                                                Exit For
                                                            End If
                                                        End If
                                                    End If
                                                End If
                                            End If
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                Next
                If My_Check = True Then VBProj.VBComponents.Remove VBComp
            End If
        End If
    Next
    
    MsgBox "Projenizdeki boş modüller silinmiştir.", vbInformation
End Sub
 

hakki83

Altın Üye
Katılım
30 Eylül 2021
Mesajlar
533
Excel Vers. ve Dili
Excel 2016 Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
30-09-2026
İlginiz için teşekkür ederim Korhan hocam. Deneyeceğim.
 

hakki83

Altın Üye
Katılım
30 Eylül 2021
Mesajlar
533
Excel Vers. ve Dili
Excel 2016 Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
30-09-2026
Korhan hocam tam tarif ettiğim gibi kod paylaşmışsınız. Emeğinize sağlık.

Bir de müsait vaktiniz olduğunuzda, yukarıdaki koda, içinde kod olmayan sadece yeşil yorumlarla dolu olan modülleri de ilave olarak, silecek şekilde ekleme yapabilir misiniz. Hani bazı modülleri yorum yazmak için kullanıyorum diye bahsetmiştim ya, işte onları da;
O kod da arşivde dursun, lazım olabilir.

Yani hem boş modüller silinecek, hem de içinde kod olmayan, sadece commentler olan modüller silinecek.

Dolayısıyla fazlalıklardan arınmış daha temiz dosyalar olacak.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,160
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Deneyiniz.

C++:
Option Explicit

Sub Delete_All_Blank_Module()
    Rem Kodun çalışması için kod editöründe Tools-References bölümünden "Microsoft Visual Basic For Applications Extensibility X.X" seçeneğinin seçili olması gerekir.
    Rem Kodun çalışması için Dosya-Seçenekler-Güven Merkezi-Güven Merkezi Ayarları-Makro Ayarları menüsünden "VBA projesi nesne erişimi modeline güven" seçeneğinin seçili olması gerekir.
    
    Dim VBProj As VBIDE.VBProject
    Dim VBComp As VBIDE.VBComponent
    Dim VBA_Code_Line As String
    Dim X As Long, My_Check As Boolean

    Set VBProj = ActiveWorkbook.VBProject
    
    For Each VBComp In VBProj.VBComponents
        If VBComp.Type = vbext_ct_StdModule Then
            My_Check = True
            If VBComp.CodeModule.CountOfLines = 0 Then
                VBProj.VBComponents.Remove VBComp
            Else
                For X = 1 To VBComp.CodeModule.CountOfLines
                    VBA_Code_Line = VBA.Trim$(VBComp.CodeModule.Lines(X, 1))
                    If VBA.Len(VBA_Code_Line) > 0 Then
                        If VBA.Left$(VBA_Code_Line, 1) <> "'" Then
                            If VBA.Left$(VBA_Code_Line, 6) <> "Option" Then
                                If VBA.Left$(VBA_Code_Line, 3) <> "Sub" Then
                                    If VBA.Left$(VBA_Code_Line, 3) <> "Dim" Then
                                        If VBA.Left$(VBA_Code_Line, 6) <> "Public" Then
                                            If VBA.Left$(VBA_Code_Line, 6) <> "Global" Then
                                                If VBA.Left$(VBA_Code_Line, 7) <> "Private" Then
                                                    If VBA.Left$(VBA_Code_Line, 8) <> "Property" Then
                                                        If VBA.Left$(VBA_Code_Line, 8) <> "Function" Then
                                                            If VBA.Left$(VBA_Code_Line, 5) <> "Const" Then
                                                                If VBA.Left$(VBA_Code_Line, 3) <> "Rem" Then
                                                                    My_Check = False
                                                                    Exit For
                                                                End If
                                                            End If
                                                        End If
                                                    End If
                                                End If
                                            End If
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                Next
                If My_Check = True Then VBProj.VBComponents.Remove VBComp
            End If
        End If
    Next
    
    MsgBox "Projenizdeki boş modüller silinmiştir.", vbInformation
End Sub
 

hakki83

Altın Üye
Katılım
30 Eylül 2021
Mesajlar
533
Excel Vers. ve Dili
Excel 2016 Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
30-09-2026
Microsoft Visual Basic For Applications Extensibility X.X
Korhan hocam merhaba

Bu seçeneği sabitleme imkaınımız var mı Excelde?

Yani her dosya için bu seçeneği açmak gerekiyor.

Sabit olarak işaretleyebilirsek veya kodlara ilave edebilirsek her dosya için uğraşmamış oluruz.
 
Son düzenleme:
Üst