• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

vba code verwijderen userforms in VBA project

Status
Niet open voor verdere reacties.

AD1957

Verenigingslid
Lid geworden
27 feb 2016
Berichten
2.155
Met onderstaande code sla ik een bestand op onder een andere naam en verwijder tevens de niet relevante werkbladen.
Bestaat er een mogelijkheid/code om de niet relevante userforms(formulieren) en macro's in het VBA project te verwijderen.

Code:
Private Sub CommandButton2_Click() [COLOR="#339900"]'OPSLAAN IN MAP BEGROTINGEN[/COLOR]
Dim tDate As String
Dim FileSaveName As String
Dim fPath As String
tDate = VBA.Format(DateSerial(Year(Date), Month(Date), Day(Date)), "dd-mm-yyyy")
fPath = "C:\Users\User\desktop\Begrotingen 2019\"
ActiveWorkbook.SaveAs Filename:=fPath & Range("Z1").Value & "----" & tDate & ".xlsm", FileFormat:=52

MsgBox "bestand is opgeslagen als excelbestand in de map begrotingen"

Application.DisplayAlerts = False[COLOR="#339900"] 'zorgt ervoor dat er geen melding komt dat onderstaande bladen worden verwijderd.[/COLOR]
Sheets(Array("inkoopboek", "verkoopboek", "aangiftes BTW", "UITGAVEN BANK", _
        "INKOMSTEN bank", "specificaties bank", "kolommenbalans ", "Factuur", _
        "debiteuren", "crediteuren")).Select
    
    ActiveWindow.SelectedSheets.Delete
    ActiveWorkbook.Save
   Application.Quit
   Application.DisplayAlerts = True[COLOR="#339900"] 'opnieuw inschakelen meldingen.[/COLOR]


End Sub
 
Ik denk als je opslaat als .xlsx, dat er dan geen code meer instaat.
Neem aan dat dan ook de Formulieren eruit zijn.
Dit zou je kunnen teste.
 
Laatst bewerkt:
Om op te slaan zonder macro's.
in plaats van
Code:
.xlsm", FileFormat:=52
deze
Code:
 ".xlsx": FileFormatNum = 51
 
Mij lijkt
Code:
format(date,"yyyy_mm_dd")
voldoende

Gebruik geen overbodige variabelen.

In plaats van 'overbodige' werkbladedn verwijderen kun je het enige relevante werkblad kopiëren en opslaan.
 
Goedemiddag gast0660 en snb,

gast0660: zou een oplossing zijn als ik alle userforms in het VBA project wil verwijderen, echter 1 userform moet wel blijven

snb: van de 10 werkbladen wil ik er twee opslaan onder een andere naam. Met activesheet.copy???? lukt dat maar met 1 werkblad.
deze code pas ik reeds toe in een andere toepassing. De huidige code leek me dan ook een goede oplossing.
 
Dit is ook een rare volgorde. Eerst sluit je Excel af en dan wil je nog iets uitvoeren. Dat kan uiteraard niet meer als Excel is afgesloten:
Code:
   Application.Quit
   Application.DisplayAlerts = True 'opnieuw inschakelen meldingen.
 
Zo kopieer je 2 werkbladen:

Code:
Sub M_snb()
   Sheets(Array("Sheet1", "Sheet2")).Copy
End Sub
 
Waarom eigenlijk zaken verwijderen uit je VBA project? Betekent ook dat al je gebruikers een beveiligingsinstelling moeten veranderen naar een niet-standaard en minder veilige instelling. Ik zou de code flexibel maken zodat deze detecteert als iets wel of juist niet mag.
 
Mijn bedoeling was, door het verwijderen van de niet noodzakelijke zaken, opslagcapaciteit te besparen.
per jaar zal dat ongeveer 1000Mb zijn.
opslaan met userforms 368kb
opslag zonder userforms 256kb en dan verschil x 1000st.

Groet,
Albert
 
Bespaar nog (heeel) veel meer door alle code uit de bestanden weg te laten en die code in een invoegtoepassing te zetten. Betekent ook (heeel) veel makkelijker updaten van je code!
 
Hoi Jan,
Kun je mij een duidelijk voorbeeld geven hoe ik dit zou moeten doen, jouw voorstel gaat echt boven mijn PET

Groet,
Albert
 
Goedemorgen,

Aan iedereen die op deze vraag gereageerd heeft.
Ik heb weer een aantal dingen geleerd.
Jan, ik zal binnenkort eens aan de slag gaan met het bouwen van een invoegtoepassing in excel.

Groet en dank,
Albert
 
Toch al enkele veranderingen in de code aangebracht op advies van edmoor en snb.
Tevens sla ik het bestand nu op als xlsb ipv. xlsm scheelt al de helft aan opslagcapaciteit en gaat rapper.


Code:
Private Sub CommandButton2_Click() [COLOR="#669966"]'OPSLAAN IN MAP BEGROTINGEN[/COLOR]
Dim tDate As String
Dim FileSaveName As String
Dim fPath As String
[COLOR="#FF0000"]tDate = Format(Date, "dd-mmm-yyyy")[/COLOR]
fPath = "C:\Users\User\Desktop\BOEKHOUDING \BOEKHOUDING 2019\Begrotingen 2019\"
ActiveWorkbook.SaveAs Filename:=fPath & Range("Z1").Value & "----" & tDate & "[COLOR="#FF0000"].xlsb", FileFormat:=50[/COLOR]

MsgBox "bestand is opgeslagen als excelbestand in de map begrotingen"

Application.DisplayAlerts = False[COLOR="#669966"] 'zorgt ervoor dat er geen melding komt dat onderstaande bladen worden verwijderd.[/COLOR]
Sheets(Array("inkoopboek", "verkoopboek", "aangiftes BTW", "UITGAVEN BANK", _
        "INKOMSTEN bank", "specificaties bank", "kolommenbalans ", "Factuur", _
        "debiteuren", "crediteuren", "vullen listboxen")).Select
    
    ActiveWindow.SelectedSheets.Delete
    Application.Quit
    Application.DisplayAlerts = True[COLOR="#669966"] 'opnieuw inschakelen meldingen.[/COLOR]
     
    ActiveWorkbook.Save



End Sub
 
Je ziet wel dat je voor de ActiveWorkbook.Save Excel al afsluit?
Die opdracht wordt dus nooit uitgeverd.
 
Laatst bewerkt:
En zo verwijder je 2 werkbladen:

Code:
Sub M_snb()
   Sheets(Array("Sheet1", "Sheet2")).Copy
End Sub

Vermijd 'Select' en 'Activate' in VBA.
 
edmoor: als ik de code activeworkbook.save weglaat krijg ik steeds de vraag "wilt u de wijzigingen opslaan"
heeft verder altijd goed gewerkt.

snb: ik heb de code veranderd in Sheets(array(......................).delete

dank voor de info,
ALbert
 
Sluit een werkboek en bewaar de wijzigingen:

Code:
Sub M_snb()
  thisworkbook.close -1
End Sub

Waarom zou je Excel afsluiten ?
 
Excel mag worden afgesloten, bijna altijd moet ik naar een ander bestand.
Ik ga toch eens kijken wat deze code doet.

Groet,
Albert

p.s. ik zit nog met een andere vraag en zal deze straks gaan stellen.
hoop dat jullie daar eens naar willen kijken.
zal wel weer een rotzooitje zijn:rolleyes:
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan