Modül ve Userform Silmek

Katılım
9 Ekim 2019
Mesajlar
109
Excel Vers. ve Dili
Standart 2016
Arkadaşlar merhaba,

Kod:
ThisWorkbook.VBProject.VBComponents.Remove VBComponent:=ThisWorkbook.VBProject.VBComponents.Item("UserForm1")
Bu kodu tek başına kullandığım zaman userform'u siliyor fakat aşağıdaki kod ile birlikte kullandığım zaman sadece buçalışmakitabı içindeki kodu siliyor, userform kalıyor. Neden olabilir?

Kod:
Private Sub CommandButton8_Click()
ThisWorkbook.VBProject.VBComponents.Remove VBComponent:=ThisWorkbook.VBProject.VBComponents.Item("UserForm1")
For Each MyMod In ThisWorkbook.VBProject.VBComponents
        Set MyMod = ThisWorkbook.VBProject.VBComponents(MyMod.Name)
        If MyMod.Type = 100 Then
            Set VBCodeMod = MyMod.CodeModule
            MyMod.CodeModule.DeleteLines 1, VBCodeMod.CountOfLines
        Else
            ThisWorkbook.VBProject.VBComponents.Remove MyMod
        End If
    Next
    End Sub
 
Katılım
1 Ağustos 2019
Mesajlar
839
Excel Vers. ve Dili
Türkçe excel 2016
İngilizce excel 2016
Altın Üyelik Bitiş Tarihi
19-10-2021
Arkadaşlar merhaba,

Kod:
ThisWorkbook.VBProject.VBComponents.Remove VBComponent:=ThisWorkbook.VBProject.VBComponents.Item("UserForm1")
Bu kodu tek başına kullandığım zaman userform'u siliyor fakat aşağıdaki kod ile birlikte kullandığım zaman sadece buçalışmakitabı içindeki kodu siliyor, userform kalıyor. Neden olabilir?

Kod:
Private Sub CommandButton8_Click()
ThisWorkbook.VBProject.VBComponents.Remove VBComponent:=ThisWorkbook.VBProject.VBComponents.Item("UserForm1")
For Each MyMod In ThisWorkbook.VBProject.VBComponents
        Set MyMod = ThisWorkbook.VBProject.VBComponents(MyMod.Name)
        If MyMod.Type = 100 Then
            Set VBCodeMod = MyMod.CodeModule
            MyMod.CodeModule.DeleteLines 1, VBCodeMod.CountOfLines
        Else
            ThisWorkbook.VBProject.VBComponents.Remove MyMod
        End If
    Next
    End Sub
[/QUO
Çalışma kitabınızın kopyasını alıp o şekilde deneyiniz Çalışmanızdaki modülleri ve Userformları siler
Kod:
Sub deneme()
Dim WSh As Worksheet
Dim fL As Object
With Application
    .DisplayAlerts = False: .ScreenUpdating = False: .Calculation = xlCalculationAutomatic
End With
regExc = "HKCU\Software\Microsoft\Office\16.0\Excel\Security\AccessVBOM"
    CreateObject("wscript.shell").regwrite regExc, 1, "REG_DWORD"

On Error Resume Next
For Each ModX In ActiveWorkbook.VBProject.VBComponents
Set VBComp = ActiveWorkbook.VBProject.VBComponents(ModX.Name)
ActiveWorkbook.VBProject.VBComponents.Remove VBComp
Set VBCodeMod = ThisWorkbook.VBProject.VBComponents(ModX.Name).CodeModule
VBCodeMod.deleteLines 1, VBCodeMod.CountOfLines
Next
ActiveWorkbook.Save
End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,763
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Profilinizde 2010 kullandığınızı belirtmişsiniz. Yeni sürümlerde dosyanızı "xlsx" uzantısı ile farklı kayıt ederseniz zaten kod ve formlar otomatik olarak silinirler. Kod ile uğraşmanıza gerek kalmaz.
 
Katılım
9 Ekim 2019
Mesajlar
109
Excel Vers. ve Dili
Standart 2016
Profilinizde 2010 kullandığınızı belirtmişsiniz. Yeni sürümlerde dosyanızı "xlsx" uzantısı ile farklı kayıt ederseniz zaten kod ve formlar otomatik olarak silinirler. Kod ile uğraşmanıza gerek kalmaz.
Ben bu kodları kullanıyorum farklı kaydetmek için ama burda xlsx yaptığım zaman dosya açılmıyor. Nasıl değiştirebilirim bu kodu xlsx olarak kaydetmek için?

Kod:
Dim vFilename As Variant
vFilename = Application.GetSaveAsFilename(filefilter:="Microsoft Excel Workbooks,*.xlsb", _
    Title:="Dosyayı Farklı Kaydet")
    If vFilename = False Then Exit Sub
    ActiveWorkbook.SaveCopyAs vFilename
    Application.DisplayAlerts = False
ActiveWorkbook.Close
 
Katılım
1 Ağustos 2019
Mesajlar
839
Excel Vers. ve Dili
Türkçe excel 2016
İngilizce excel 2016
Altın Üyelik Bitiş Tarihi
19-10-2021
Ben bu kodları kullanıyorum farklı kaydetmek için ama burda xlsx yaptığım zaman dosya açılmıyor. Nasıl değiştirebilirim bu kodu xlsx olarak kaydetmek için?

Kod:
Dim vFilename As Variant
vFilename = Application.GetSaveAsFilename(filefilter:="Microsoft Excel Workbooks,*.xlsb", _
    Title:="Dosyayı Farklı Kaydet")
    If vFilename = False Then Exit Sub
    ActiveWorkbook.SaveCopyAs vFilename
    Application.DisplayAlerts = False
ActiveWorkbook.Close
Sayın tuvons siz xlsm uzantılı bir çalışmayı xlsx olarakmı kaydetmek istiyorsunuz öyle ise sorunuz yanlış olmuş
 
Katılım
9 Ekim 2019
Mesajlar
109
Excel Vers. ve Dili
Standart 2016
@Korhan Ayhan @metin_0606
Kusura bakmayın bu konu ile ilgili farklı bir sorum olacak. Makroları hiç silmesek ama 1 kere çalışan makro bir daha çalışmasa nasıl olur? Yani commandbuttona 1 kere basınca çalışsa, aynı dosyada bir daha basınca çalışmasa. Bunu yapabilir miyiz makro ile?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,763
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Basit yoldan şu şekilde yapabilirsiniz.

Dosyanıza bir adet sayfa ekleyin. Bu sayfayı daha gizleyin.

Sonra kullandığınız makro kodunun sonuna bu sayfanın A1 hücresine bir ifade yazdırın. Mesela "X" yazdırın.

Sonra kullandığınız makronuzun ilk satırına aşağıdaki gibi bir sorgu ekleyin.

If Sheets("Gizli Sayfa Adı").Range("A1") = "X" Then Exit Sub

Bu şekilde makronuz bu hücreyi kontrol edecek hücre boş ise çalışmaya devam edecek. Değilse bir kez çalışıp duracaktır.

Bu sayfayı gizlerken kod tarafında aşağıdaki gibi yaparsanız sayfa gizle-göster kısmında da gözükmez böylece acemi kullanıcılar müdahale edemezler.

218561
 
Üst