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

formule in tabbladnaam

Status
Niet open voor verdere reacties.

kv41282

Gebruiker
Lid geworden
14 dec 2007
Berichten
92
Ik heb een kasboek in excel, maar die wil ik wat meer automatiseren.
Nou moet ik elke maand in de tabbladen de dag en datum handmatig invoeren. bijv het tabblad "ma 17-12-07" en "di 18-12-07". Dit is iedere maand best veel typewerk. En vroeg me af of het mogelijk is om ook een functie in een tabblad te zetten.

De functie het ik zelf al wel. Want die gebruik ik ook al in cel A1 van datzelfde tabblad.
En ik had gehoopt dat ik gewoon in de tabbladnaam de functie "=A1" kon gebruiken, maar dit is toch niet het geval.
 
Dat kan je via (simpele) VBA code oplossen.

Klopt.

kv41282

bedoel je dat je per dag een ander tabblad hebt? Is dat niet wat veel? (zelfs al staan ze niet allemaal in hetzelfde bestand, dan nog).
 
Ja, ik heb voor iedere dag een nieuwe tabblad nodig.
Omdat er per dag heel erg veel moet worden bijgehouden.
Ik wil gaan proberen voor iedere maand 1 bestand te maken. en dan wel per bestand 35 tabladen ofzo.

Hoe ziet die formule eruit en hoe gaat dat in z'n werk?
 
Code:
Sub zettabbladnaam()
    ActiveSheet.Name = Range("A1").Value
End Sub

Verander de A1 in de cel die de naam van het tabblad heeft.

Als je deze code uitvoert, wordt de naam van het tabblad aangepast. Dit gebeurt niet automatisch bvb als je A1 verandert. Die situatie kan wel - en is ook al talloze keren hier op het forum gezet - maar is m.i. niet echt aangewezen. Al bij al is het slechts 1x dat de tabbladnamen moeten gezet worden, en niet constant veranderen.

Wigi
 
Dit is de macro voor alle sheets tegelijk:

Code:
Sub zettabbladnaamvoorallebladen()
    Dim i as Long
    For i = 1 To Sheets.Count
            Sheets(i).Name = Sheets(i).Range("A1").Value
    Next
End Sub

Wigi
 
kv41282 zei:
voor iedere maand 1 bestand te maken. en dan wel per bestand 35 tabladen
...Ehhh, 35 dagen in een maand??? :D

Maar alle gekheid op een stokje... Ik heb een blokje code voor je geschreven die een workbook vult met 'net zoveel sheets als dat er dagen zijn in de maand die je opgeeft'.
Tevens krijgt iedere tabnaam de betreffende datum mee... En aan het einde van de code wordt het workbook nog voor de veiligheid onder een nieuwe naam opgeslagen.
Code:
Sub MaakTabbladen()
'Code voor Helpmij.NL; Leo Meijer; 18/12/2007 22:04
Dim i As Integer, iMnd As Integer, iJr As Integer

    If Sheets.Count > 40 Then Exit Sub 'voorkom het gebruik van deze code als het workbook al gevuld is met sheets...
    
    Application.ScreenUpdating = False
    
    iMnd = Application.InputBox("Geef het nummer van de maand...", "Maandnr.", 1, , , , , 1)
    iJr = Application.InputBox("Geef het jaar...", "Jaar", Year(Date), , , , , 1)
    
    For i = 2 To LastDayOffMonth(iMnd, iJr)
        With ActiveWorkbook
            .Sheets.Add After:=Worksheets(Worksheets.Count)
            .ActiveSheet.Name = Format(i, "00") & "-" & Format(iMnd, "00") & "-" & Right(iJr, 2)
        End With
    Next i
    
    Sheet1.Name = Format(1, "00") & "-" & Format(iMnd, "00") & "-" & Right(iJr, 2)
    
    ActiveWorkbook.SaveAs Filename:="Kasboek " & Format(iMnd, "00") & "-" & Format(iJr, "00")
    
    Application.ScreenUpdating = True
    
End Sub

Function LastDayOffMonth(iMaand As Integer, iJaar As Integer) As Integer

    LastDayOffMonth = Day(DateValue("1/" & Month("1/" & iMaand + 1 & "/" & iJaar) & "/" & iJaar) - 1)

End Function


Kijk maar of je hier iets aan hebt (voor het gemak ook het workbook als bijlage)

Groet, Leo
 

Bijlagen

Ginger,

uw functie om de laatste dag van de maand te achterhalen, werkt correct, maar kan eenvoudiger geschreven worden.

Code:
Function LastDayOffMonth(iMaand As Integer, iJaar As Integer) As Integer
    LastDayOffMonth = Day(DateSerial(iJaar, iMaand + 1, 0))
End Function

Ik stel me ook wel de vraag of je daar eigenlijk wel een aparte functie voor moet schrijven, het is eigenlijk maar 1 regel code, die misschien beter dadelijk berekend wordt.

Bovenstaande is maar een opmerking in de rand, maar misschien heb je er in de toekomst wel iets aan.
 
Als ik in een project meermaals de laatste dag van de maand nodig zou hebben, dan zou ik het idd in een aparte functie steken. Anders gewoon als 1 regel met daarboven een regel commentaar.
 
Gaaf man, ik wist niet dat dit allemaal met excel kon. Heb alleen nog maar een basis cursus excel ooit op school gehad. vind dit llemaal wel erg interessant. LEeer ontzettend veel van dit forum.

Maare.....Ik heb nu dus de datum (17-12-2007.......31-12-2007 etc) in de tabbladen staan....
is het ook mogelijk dat hierbij de eerste twee letters van de dag bij komen te staan. Dus bijvoorbeeld ma 17-12-2007 en ma 31-12-2007?

Al vast kei erg bedankt!!
Kim
 
Verander de code van Leo tot:

Code:
'...
.ActiveSheet.Name = [B]Format(DateSerial(iJr, iMnd, i), "dd -mm-yy")[/B]
'...

Wigi
 
@Finch
Finch zei:
uw functie om de laatste dag van de maand te achterhalen, werkt correct, maar kan eenvoudiger geschreven worden.
Mijn hartelijke dank voor deze kortere versie. Ik snap niet hoe het kan werken met dag '0'... Maar goed, 't werkt! :thumb: Mijn 1e poging om de laatste dag van de maand te achterhalen besloeg trouwens enkele regels. Ik was dus al reuze blij dat ik deze ene regel had weten te bedenken. De hoeveelheid regels was trouwens ook de bijkomende reden dat ik er een aparte functie van wilde maken.
Finch zei:
Ik stel me ook wel de vraag of je daar eigenlijk wel een aparte functie voor moet schrijven, het is eigenlijk maar 1 regel code, die misschien beter dadelijk berekend wordt.
Ik ben het helemaal met je stelling eens, Maar ik ben op dit moment bezig om 'uitgestelde zaken' zoals Array's en Functions (aangeroepen vanuit een Sub) te doorgronden. Deze dingen hoorden bij mij altijd thuis in het rijtje 'moeilijk, dus doe ik niet'... .:o Maar ik vind me zelf nu zo ver gekomen dat het toch maar moet. Vandaar dat ik vanaf nu wellicht een iets vreemde wending in m'n codes zal nemen. :) (hier helpen doe ik ook om er zelf wijzer van te worden! = win, win)

@Wigi
Wigi zei:
Verander de code van Leo tot
Wim, met je voorstel pas je de naam van het nieuwe workbook aan... Maar wel bedankt voor de syntax die je me hierbij gegeven hebt. Is weer een stuk duidelijker dan mijn versie.

@Kv41282
Kv41282 zei:
is het ook mogelijk dat hierbij de eerste twee letters van de dag bij komen te staan. Dus bijvoorbeeld ma 17-12-2007 en ma 31-12-2007?
Tuurlijk.... :D Hierbij de aangepaste (volledige) code. Zet deze in de plaats van de vorige versie.
Code:
Sub MaakTabbladen()
'Code voor Helpmij.NL; Leo Meijer; 18/12/2007 22:04
Dim i As Integer, iMnd As Integer, iJr As Integer

    If Sheets.Count > 27 Then Exit Sub 'voorkom het gebruik van deze code als het workbook al gevuld is met sheets...
    
    Application.ScreenUpdating = False
    
    iMnd = Application.InputBox("Geef het nummer van de maand...", "Maandnr.", 1, , , , , 1)
    iJr = Application.InputBox("Geef het jaar...", "Jaar", Year(Date), , , , , 1)
    
    For i = 2 To LastDayOffMonth(iMnd, iJr)
        With ActiveWorkbook
            .Sheets.Add After:=Worksheets(Worksheets.Count)
            .ActiveSheet.Name = Format(DateSerial(iJr, iMnd, i), "ddd dd-mm-yy")
        End With
    Next i
    
    Sheet1.Name = Format(DateSerial(iJr, iMnd, 1), "ddd dd-mm-yy")
    
    ActiveWorkbook.SaveAs Filename:="Kasboek " & Format(iMnd, "00") & "-" & Format(iJr, "00")
    
    Application.ScreenUpdating = True
    
End Sub

Function LastDayOffMonth(iMaand As Integer, iJaar As Integer) As Integer

    LastDayOffMonth = Day(DateSerial(iJaar, iMaand + 1, 0))

End Function

Groet, Leo

P.s. Finch, Wigi, Dank voor de wijze opmerkingen! :thumb:
 
Laatst bewerkt:
@Finch
Mijn hartelijke dank voor deze kortere versie. Ik snap niet hoe het kan werken met dag '0'...

De 0de dag van een maand is binnen Excel de laatste dag van de vorige maand. Werkt ook bij de gewone werkbladfuncties. Kan soms wel eens handig zijn, om een uitgebreide formule (met bv. veel geneste IF functies) te vervangen.
 
@Wigi, met je voorstel pas je de naam van het nieuwe workbook aan... Maar wel bedankt voor de syntax die je me hierbij gegeven hebt. Is weer een stuk duidelijker dan mijn versie.

Dat denk ik niet. Het is de Name eigenschap van ActiveSheet, dus een workbook wordt er niet aangepast. Tenzij ik iets over het hoofd zie natuurlijk.
 
Dat denk ik niet. Het is de Name eigenschap van ActiveSheet, dus een workbook wordt er niet aangepast. Tenzij ik iets over het hoofd zie natuurlijk.

Zo zie ik het ook, maar in jouw aangepaste code, nl. de volgende:

Code:
ActiveSheet.Name = Format(DateSerial(iJr, iMnd, i), "dd -mm-yy")

verander je de sheetnaam nog niet in het gewenste formaat van de TS, nl ma xx-xx-xx of di xx/xx/xx.

Daarom de lichte aanpassing (die Leo ook al opmerkte):

Code:
ActiveSheet.Name = Format(DateSerial(iJr, iMnd, i), "[COLOR="Red"]ddd[/COLOR] dd -mm-yy")
 
Wigi, Mijn welgemeende excuses! In de snelheid fout gelezen...:o:o:o Je had gewoon gelijk! :thumb:

Finch, Tip opgeslagen! Bedankt! :thumb:

Groet, Leo

EDIT: @Finch, Ik zie net je post hierboven... Let op dat je niet voor het format met de slashes ('/') kiest in de naam van de tab. Dan knalt je code op een error (onjuist character)
 
Laatst bewerkt:
HAHa wat hier nu allemaal heen en weer wordt gestuurd is echt acacadabra voor mij. Ik wist niet dat dit allemaal in excel kon, en dan zullen dit allemaal nog maar beginnerstechnieken zijn.

in iedergeval bedankt. Ik ga vanmiddag weer ff verder puzzelen, als ik weer met een probleem kom te zitten dan zul je me vast zien verschijnen.

alsvast hartstikke bedankt.
Kim
 
EDIT: @Finch, Ik zie net je post hierboven... Let op dat je niet voor het format met de slashes ('/') kiest in de naam van de tab. Dan knalt je code op een error (onjuist character)

Klopt Leo. Had daar bij het verduidelijken van mijn opmerking geen rekening mee gehouden, de code was wel correct. Maar idd een / is een veboden teken in de
sheet naam.
 
Daar ben ik weer.
In bijgevoegde bijlage heb ik 2 bestanden staan. Het gaat over dat kasboek waar ik het al eerder over had.

Ik wilde in de tabblad namen de dagaanduiding en de datum van die dag hebben staan. En dat in een bestand voor een maand, dus 30 of 31 tabbladen met die dag en datum aanduiding. En dan nog enkele andere , samenvattende tabbladen, zoals een overzichts-tabblad en een verzamel-tabblad.

Ik had wat verschillende tips hierboven gekregen en heb ze in de verschillende documenten toe proberen te passen. maar dat lukt me dus nog niet helemaal.


In cel B1 en C1 staat al wel de dag en datum in gevuld dus misschien is dat makkelijk om daarmee een formule te maken. Of misschien moeten juist die cellen worden gekoppeld aan de naam van de tabbladen ik weet niet wat het makkelijkste is.

Kunnen jullie me alstublieft helpen? Of anders allen een beetje op het goede pad brengen?

al vast bedankt.
 

Bijlagen

Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan