• 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.

Werkblad en naam met opvolgnummer geven

Status
Niet open voor verdere reacties.

Joete

Gebruiker
Lid geworden
19 sep 2008
Berichten
87
Ik ben bezig met een systeem voor mijn werk.
Nu maak ik door middel van een macro een nieuw werkblad aan, kant en klaar, met alle opmaak en formules.
Nu wil ik dit tabblad automatisch een naam met volgnummer geven. De naam is steeds hetzelfde, het volgnummer loopt, hoe kan het ook anders, steeds 1 op.

Dit is de code die ik nu gebruik in de macro:
Code:
Sub Rekenmodule()
'
' Rekenmodule Macro
'
' Sneltoets: CTRL+r
'
Dim nieuw As String
nieuw = "RM_1"

Sheets("RM_").Copy After:=Sheets(Sheets.Count)
Sheets("RM_ (2)").Visible = True
Sheets("RM_ (2)").Name = nieuw

Sheets("I_project").Select
    ActiveCell.Rows("1:1").EntireRow.Select
    ActiveCell.Offset(0, 1).Select
    Selection.Copy
Sheets(nieuw).Select
    Range("A2:I2").Select
    ActiveCell.PasteSpecial
    Application.CutCopyMode = False

Application.ScreenUpdating = False
    
Sheets("I_Project").Select
    ActiveCell.Rows("1:1").EntireRow.Select
    ActiveCell.Offset(0, 4).Activate
    ActiveCell.Formula = "=" & nieuw & "!I8"
    ActiveCell.Offset(0, 2).Select
    ActiveCell.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
        "'" & nieuw & "'!A1", TextToDisplay:="Rekenmodule"
            
Sheets(nieuw).Select
End Sub

Zoals je kunt zien heb ik dus een standaard werkblad (RM_) wat ik kopieer en voorzie van een nieuwe naam "nieuw". Die "nieuw" heb ik nu als een vast waarde ingevuld, maar die moet eigenlijk als volgt opgebouwd worden: RM_001, de volgende RM_002, enz.

Ik zat zelf eerst te denken aan een controle voor hoeveel rekenmodules er bestaan, maar dit is naar mijn idee toch geen oplossing omdat deze werkbladen verwijderd kunnen worden. Bijvoorbeeld RM_006 wordt verwijderd terwijl RM_010 al bestaat, dit zou resulteren in een nieuwe RM_010 en geeft dus een foutmelding. Doortellen is de enige optie naar mijn idee, maar dat krijg ik niet voor elkaar en ook het samenvoegen van de naam en het nummer lukt mij niet...

Weet iemand hoe ik dit simpel op kan lossen?
Al vast bedankt.
 
Code:
    With Sheets.Add
        .Name = "RM_" & Format(Sheets.Count, "0000")
        Sheets("RM").Cells.Copy .[A1]
    End With
of nog iets robuuster

Code:
  With Sheets.Add
    .Name = "RM_" & Format(Replace(.CodeName, "Blad", ""), "0000")
    Sheets("RM").Cells.Copy .[A1]
    Sheets("I_Project").Hyperlinks.Add Sheets("I_Project").[E1], "#" & .Name & "!A1", , , "Rekenmodule " & .Name
  End with
Zonder Select of Activate
 
Laatst bewerkt:
Vorige suggestie uitgebreid met de hyperlink.
 
Zit nu ff wat te denken en te proberen. Maar als ik nu 30 rekenmodules heb aangemaakt en ik verwijder er 5 in het midden, dan ga ik fouten krijgen...
Is het mogelijk om iets met een uniek nummer te doen? Zit nu ff te denken aan iets van datetime() zoals dat bij PHP gebruikt wordt. Bestaat er ook zoiets in VBA? Dit voorkomt namelijk problemen die ik nu wel zou kunnen krijgen.
 
Iemand een idee of dit gemaakt kan worden met een datum en tijd?
Dus dat ik dan iets krijg als RM_20090702203913, zodat ik altijd een uniek nummer heb?
 
Ben zelf al ff aan het puzzelen geweest (en puzzel nog ff lekker door), ben tot nu toe hier:
Code:
Dim nieuw As String

Dim zoekIn As String
Dim zoekNaar As String
Dim vervangDoor As String
Dim varResultaat1 As String
Dim varResultaat2 As String
Dim varResultaat3 As String

zoekIn = Format(datumTijd, yyyy-mm-dd hh:mm:ss)
zoekNaar1 = "-"
zoekNaar2 = ":"
zoekNaar3 = " "
vervangDoor = ""

varResultaat1 = Replace(zoekIn, zoekNaar1, vervangDoor, , , vbTextCompare)
varResultaat2 = Replace(varResultaat1, zoekNaar2, vervangDoor, , , vbTextCompare)
varResultaat3 = Replace(varResultaat2, zoekNaar3, vervangDoor, , , vbTextCompare)

nieuw = "RM_" & varResultaat3
Ik krijg nu de volgende tabblad naam:
RM_272009234516
Dus 2 juli 2009 23 uur 45 minuten en 16 seconden
Wat ik eigenlijk wil is eerst het jaar in 4 cijfers (2009)
Dan de maand in 2 cijfers (07)
Dan de dag in 2 cijfers (02)
En dan de tijd zoals die nu ook al staat.

Iemand een idee hoe ik dit kan gaan doen?
 
Ik krijg nu de volgende tabblad naam:
RM_272009234516
Dus 2 juli 2009 23 uur 45 minuten en 16 seconden
Wat ik eigenlijk wil is eerst het jaar in 4 cijfers (2009)
Dan de maand in 2 cijfers (07), Dan de dag in 2 cijfers (02)
En dan de tijd zoals die nu ook al staat.
Hoe staat de datum dan op de plaats waar die wordt opgehaald?
Als ik de datum laat ophalen uit een cel waarin bv 03-07-2009 staat, dan wordt die datum wel degelijk weergegeven als 20090703
Er staat wel een fout in je code. In de regel:
zoekIn = Format(datumTijd, "yyyy-mm-dd hh:mm:ss")
ontbreken bij jou de aanhalingstekens.
 
Mijn dank is heeeeeeeeeeeeeeeeeeel groot. Gisteren de hele dag mee lopen klieren, niet gelukt...was idd de aanhalingstekens vergeten :confused:
Werkt nu helemaal goed zoals ik het wilde hebben.
Nogmaals bedankt!
 
Ik zou toch maar eens wat meer op dit forum rondneuzen:

Code:
With Sheets.Add
    .Name = "RM_" & "RM_" & format(date,"yyyymmddhhmmss"
    Sheets("RM").Cells.Copy .[A1]
    Sheets("I_Project").Hyperlinks.Add Sheets("I_Project").[E1], "#" & .Name & "!A1", , , "Rekenmodule " & .Name
End with

want:
Code:
nieuw = "RM_" & format(date,"yyyymmddhhmmss"
doet hetzelfde als
Code:
zoekIn = Format(datumTijd, yyyy-mm-dd hh:mm:ss)
zoekNaar1 = "-"
zoekNaar2 = ":"
zoekNaar3 = " "
vervangDoor = ""

varResultaat1 = Replace(zoekIn, zoekNaar1, vervangDoor, , , vbTextCompare)
varResultaat2 = Replace(varResultaat1, zoekNaar2, vervangDoor, , , vbTextCompare)
varResultaat3 = Replace(varResultaat2, zoekNaar3, vervangDoor, , , vbTextCompare)

nieuw = "RM_" & varResultaat3

Wees terughoudend met het gebruik van overbodige variabelen.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan