Modül Silme VBA Kod

petsiye

Altın Üye
Katılım
28 Eylül 2009
Mesajlar
137
Excel Vers. ve Dili
Office 2019 TR 32 Bit
Altın Üyelik Bitiş Tarihi
10-05-2029
Merhaba,

Elimde aşağıdaki gibi bir kod mevcut. Anlaşılacağı üzere 3 ayrı modülü silme işine yarıyor. Dosyada sıra ile çalışan bir dizi makro var. Makroların en sonundada bu kodlar var ( ModuleSil Makrosu var yani )

Diğer mevcut makrolar sıra ile sorunsuz bir şekilde çalışıyor. En sonda da ModulSil makrosu çalışıyor ve dosya kapanıyor. Kaydedilen dosyayı açtığımda Sadece Module2 makrosunun silindiğini, diğer 2 makronun ( modülün ) silinmediğin görüyorum. Dosyayı açtıktan sonra MaduleSil makrosunu manuel tetikliyorum ve diğer 2 makroyuda siliyor ( Zaten silinmiş olan Module2 yi VBA kodundan siliyorum hata almamak için )

Farklı birçok yöntem denedim fakat sadece Module2 Makrosu siliniyor, diğer makrolar silinmiyor.

Sebebi acaba ne olabilir ?

Sub ModulSil()
Dim modulAdi As String

' Silinecek modülün adını belirtin
modulAdi1 = "Module25"
modulAdi2 = "Module26"
modulAdi3 = "Module2"

' Aktif çalışma kitabındaki VBA projesindeki modülü sil
ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents(modulAdi1)
ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents(modulAdi2)
ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents(modulAdi3)


ThisWorkbook.Save
ActiveWorkbook.Save
Application.Quit


End Sub
 

maliex

Altın Üye
Katılım
22 Eylül 2019
Mesajlar
227
Excel Vers. ve Dili
professional plus 2016-türkçe
Altın Üyelik Bitiş Tarihi
23-09-2025
Merhaba , yukarıdaki soruya ek olarak eğer kullanıcı "test" adlı module girerse/açarsa ,farklı bir modulde yeralan "deneme1" adlı sub' ı çalıştırması için nasıl bir kod yazılabilinir
 
Katılım
9 Şubat 2022
Mesajlar
204
Excel Vers. ve Dili
Office 2021 Türkçe (x64)
Altın Üyelik Bitiş Tarihi
09-02-2027
Dim modulAdi As String demişsiniz.

Kod başına şunu eklemeyi deneyin:
Kod:
Dim modulAdi1 As String
Dim modulAdi2 As String
Dim modulAdi3 As String
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,191
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba , yukarıdaki soruya ek olarak eğer kullanıcı "test" adlı module girerse/açarsa ,farklı bir modulde yeralan "deneme1" adlı sub' ı çalıştırması için nasıl bir kod yazılabilinir
Genel kullanım aşağıdaki gibidir.

C++:
Sub Run_Macro()
   Call deneme1
End Sub
Modül adını biliyorsanız aşağıdaki gibi de olabilir.

C++:
Sub Run_Macro()
   Call Module1.deneme1
End Sub
 

maliex

Altın Üye
Katılım
22 Eylül 2019
Mesajlar
227
Excel Vers. ve Dili
professional plus 2016-türkçe
Altın Üyelik Bitiş Tarihi
23-09-2025
Korhan bey ,

sorum sanırım yanlış anlaşıldı...amacım module girildiğinde başka moduldeki kod çalışsın .."run" yapmadan
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,191
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Evet yanlış anlamışım..

"Module girildiğinde" olayı varmı ben duymadım.. Varsa bende öğrenmiş olurum..
 

petsiye

Altın Üye
Katılım
28 Eylül 2009
Mesajlar
137
Excel Vers. ve Dili
Office 2019 TR 32 Bit
Altın Üyelik Bitiş Tarihi
10-05-2029
Dim modulAdi As String demişsiniz.

Kod başına şunu eklemeyi deneyin:
Kod:
Dim modulAdi1 As String
Dim modulAdi2 As String
Dim modulAdi3 As String
Tavsiyeniz üzerine aşağıdaki hale getirdim, yine sadece Module2 siliniyor. Diğer iki Module silinmiyor. Çok ilginç

Sub ModulSil()

Dim modulAdi1 As String
Dim modulAdi2 As String
Dim modulAdi3 As String



' Silinecek modülün adını belirtin


modulAdi1 = "Module134"
modulAdi2 = "Module24"
modulAdi3 = "Module2"

' Aktif çalışma kitabındaki VBA projesindeki modülü sil
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.VBComponents(modulAdi1)
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.VBComponents(modulAdi2)
ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.VBComponents(modulAdi3)

End Sub
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
Merhaba;

Öncelikle güven merkezi ayarlarından;

"VBA projesi nesne modeline güven" kutucuğunu işaretleyin.

Sonra;

C#:
Sub ListModules()
    Dim vbComponent As Object
    
    ' Projedeki tüm modülleri listele
    For Each vbComponent In ActiveWorkbook.VBProject.VBComponents
        Debug.Print vbComponent.Name
    Next vbComponent
End Sub
Yukarıdaki kod ile module isimlerini kontrol edin.

Daha sonra silme/kaldırma için aşağıdaki kodu çalıştırın.

C#:
Sub ModulSil()

    Dim modulAdi1 As String
    Dim modulAdi2 As String
    Dim modulAdi3 As String
    
    ' Silinecek modül adlarını belirtin
    modulAdi1 = "Module2"
    modulAdi2 = "Module3"
    modulAdi3 = "Module4"
    
  
    If ModuleExists(modulAdi1) Then
        ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.VBComponents(modulAdi1)
    Else
        MsgBox modulAdi1 & " adında bir modül bulunamadı!", vbExclamation
    End If
    
    
    If ModuleExists(modulAdi2) Then
        ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.VBComponents(modulAdi2)
    Else
        MsgBox modulAdi2 & " adında bir modül bulunamadı!", vbExclamation
    End If
    
  
    If ModuleExists(modulAdi3) Then
        ActiveWorkbook.VBProject.VBComponents.Remove ActiveWorkbook.VBProject.VBComponents(modulAdi3)
    Else
        MsgBox modulAdi3 & " adında bir modül bulunamadı!", vbExclamation
    End If

End Sub

Function ModuleExists(moduleName As String) As Boolean
    Dim comp As Object
    On Error Resume Next
    Set comp = ActiveWorkbook.VBProject.VBComponents(moduleName)
    On Error GoTo 0
    ModuleExists = Not comp Is Nothing
End Function
 
Üst