• 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 nieuw werkblad maken

Status
Niet open voor verdere reacties.

Marky76

Gebruiker
Lid geworden
26 okt 2002
Berichten
424
Beste,

In bijlage een bestandje waarmee ik het volgende wil bereiken.
Ik heb al een macrotje gemaakt om te wissen met een MsgBox en daarna nog een macrotje waarmee ik een nieuw werkblad aanmaak en de eerste macro aanroep om de inhoud te wissen. So far so good, maar ik zou graag hebben dat het tabblad de datum heeft van de dag waarin ik mij bevind en dat deze ook behouden blijft wanneer ik het de volgende dag terug wil gebruiken. Nu moek ik het manueel typen in de tab.

Heeft iemand een idee hoe dit op te lossen is?

Dank, Mark
 

Bijlagen

  • CASHFLOW.zip
    23,9 KB · Weergaven: 47
Mark

Haal eens eerst de Select eruit.

Dit

Code:
Range("C4:D4").Select
    Selection.ClearContents

kan veel beter als

Code:
Range("C4:D4").ClearContents

Daarna kan je verder gaan met de andere vragen.

Wigi
 
Ah, net gezien:

'je kan het wissen ook korter schrijven

Doe dat dan! ;)

Code zoals dit mag er ook uit:

Code:
ActiveWindow.SmallScroll Down:=-42

Wigi
 
Dit is jouw nieuwwerkblad macro, maar dan opgekuist en uitgebreid:

Code:
Sub Nieuwwerkblad()
    Dim ws As Worksheet
    Set ws = Worksheets.Add(before:=Sheets(1))
    ws.Name = Format(Date, "dd-mm-yy")
    Wissenbanken
End Sub

Alles wat je verder doet aan het nieuwe blad, doe je via

ws.

Wigi
 
Wigi,

Heb mijn bestand aangepast zoals gevraagd, maar ik heb nog een foutmelding hij stopt op de 3 de lijn van je code.

Alsook is het werkblad dat hij invoegt, een nieuw werkblad dat leeg is.

Het werkblad dat toegevoegt wordt moet een excate kopie zijn, en met de macro wissenbanken, word de inhoud gewist en zo kan ik er dan terug in werken.

Er is dus nog een small probleempje.

Groeten, Mark
 

Bijlagen

  • CASHFLOW.zip
    22,6 KB · Weergaven: 30
Ik had het verkeerd begrepen daarstraks.

Hier wel het gevraagde:

Code:
Sub Nieuwwerkblad()
' Nieuwwerkblad Macro
' De macro is opgenomen op 6/06/2007 door Georges Cloosterin.

    Dim ws As Worksheet
    ActiveSheet.Copy before:=Sheets(1)
    Set ws = Sheets(1)
    With ws
        .Name = Format(Date, "dd-mm-yy")
        .Activate
    End With
    Wissenbanken
End Sub

Wigi
 
En de andere macro ook:

Code:
Sub Wissenbanken()
' Wissenbanken Macro
' De macro is opgenomen op 11-7-2006 door Mark.
' Sneltoets: CTRL+b
    Dim rng As Range
    If MsgBox("Weet u zeker dat u door wilt gaan?", vbYesNo + vbQuestion + vbDefaultButton2) = vbYes Then
        Set rng = Range("C4,C8,C12,C15,C18,C21,C25,C31,C35,C38,C41")
        Set rng = Application.Union(rng, rng.Offset(, 1), rng.Offset(, 3))
        Set rng = Application.Union(rng, Range("C28:D28,C44:D44,C47:D47,C50:D50,C54:D54,C57:D57,C60:D60,C65:D65,C67:D67,C70:D70,F65,I:J"))
        rng.ClearContents
        Range("D3:D69").ClearComments
    End If
End Sub

Genoeg materiaal om eens te bestuderen ;)

Wigi
 
Wigi,

Bedankt, die twee macro werkt perfect en is een pak korter, dat wil ik deze avond wel eens uitzoeken hoe je dit gedaan hebt. Mag ik vragen stellen als er zaken zijn die ik niet goed begrijp?

Hij maakt nu het tweed werkblad aan, maar hij geeft nog een kleine foutmelding.

In bijlage heb ik voor jou printscreens genomen zodat je in een oogopslag kan zien waar hij stopt in de code en in excel.

Groeten, Mark
 

Bijlagen

  • Cashflow.zip
    76,3 KB · Weergaven: 61
  • Kopie van CASHFLOW.zip
    23,7 KB · Weergaven: 38
Het blad van 7 juni bestaat al. Je kan niet 2 keer dezelfde naam gebruiken voor tabbladen.
 
In plaats 2 knoppen op het blad heb ik een werkbalk gemaakt dit werkt aangenamer.

Pierre
 

Bijlagen

  • Kopie van CASHFLOW(1).zip
    18,3 KB · Weergaven: 54
Hey,

Wigi werkt perfect. Knap met de knoppen in de balk.
Dit ga ik even bestuderen, om van een olifante code naar een code zo groot als een muis te gaan, dat wil ik wel snappen. Jouw code zal ook sneller gaan en minder tijd in beslag nemen elke keer ik mijn excel opslaag. Want elke dag word er een tab aangemaakt en uiteindelijk moest ik 10 seconden wachten vooraleer het gesaved was, dus met de jouwe
zal dit wel niet meer het geval zijn.

Bedankt voor de gedane moeite, Mark.
 
owowowow sorry,

Bedankt Pierre voor de knoppen, werkt gemakkelijker.
Heb het nagezien tijdens het werk en dan heb ik niet veel tijd en had
niet goed gezien dat jij de knoppen had gemaakt.

Bedankt Pierre, Mark
 
Hey Pierre,

Bedankt voor de link, interessante site.
Ga ik zeker bijhouden!


Groeten, Mark
 
Wigi,

Hieronder jouw code:

Code:
Sub Wissenbanken()
' Wissenbanken Macro
' De macro is opgenomen op 11-7-2006 door Mark.
' Sneltoets: CTRL+b
    Dim rng As Range
    If MsgBox("Weet u zeker dat u door wilt gaan?", vbYesNo + vbQuestion + vbDefaultButton2) = vbYes Then
        Set rng = Range("C4,C8,C12,C15,C18,C21,C25,C31,C35,C38,C41")
        Set rng = Application.Union(rng, rng.Offset(, 1), rng.Offset(, 3))
        Set rng = Application.Union(rng, Range("C28:D28,C44:D44,C47:D47,C50:D50,C54:D54,C57:D57,C60:D60,C65:D65,C67:D67,C70:D70,F65,I:J"))
        rng.ClearContents
        Range("D3:D69").ClearComments
    End If
End Sub

Ik heb opgezocht hoe het werkt en wat het juist doet is het volgende:
Hij neemt de rangen die bepaald zijn bij de eerste Set. Bij de tweede set word bepaald dat je cel er juist rechts van alsook diegene die zich 3 posities verder bevindt ook moet nemen en met de 3 de Set zeg je dat je alle rangen moet nemen zoals bepaald in de bovenstaande Set als ook nog diegienen die na de komma zijn bepaald en dan pas je de methode ClearContents toe.
Ik heb de code ook eens geprobeerd zonder de application zoals hieronder weergegeven en het werkt ook. Mag ik dit doen of is dit beter te vermijden??

Code:
Dim rng As Range
    If MsgBox("Weet u zeker dat u door wilt gaan?", vbYesNo + vbQuestion + vbDefaultButton2) = vbYes Then
        
       
        Set rng = Range("C4,C8,C12,C15,C18,C21,C25,C28,C31,C35,C38,C41")
        Set rng = Union(rng, rng.Offset(, 1), rng.Offset(, 3))
        Set rng = Union(rng, Range("C44:D44,C47:D47,C50:D50,C54:D54,C57:D57,C60:D60,C65:D65,C67:D67,C70:D70,C73:D73,C76:D76,F44,I:J"))
        rng.ClearContents
        Range("D3:D90").ClearComments
        
        
    End If
End Sub

Groeten, Mark
 
Dit had ik gevonden.

Syntaxis

expressie.Union(Arg1, Arg2, ...)

expressie Optioneel. Een expressie die een Application-object als resultaat geeft.

Arg1, Arg2, ... Range, vereist. Geef hier minimaal twee Range-objecten op.


Dus blijkbaar mag je application laten vallen opdat de code zou werken.

Groeten, Mark
 
Dat mag weggelaten worden, maar velen verkiezen dat er wel staat. Omdat dat net iets duidelijker is. Kies dus maar.

Jouw uitleg over hoe dat bereik bepaald wordt, klopt volledig!

Wigi
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan