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

datum ophalen vba

Status
Niet open voor verdere reacties.

popipipo

Meubilair
Lid geworden
21 nov 2006
Berichten
9.089
Besturingssysteem
Win11
Office versie
Office 365
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
ActiveSheet.Name = [s1]
End Sub

Code:
Sub LoadSheets()
    Dim Sh As Worksheet
    Dim i As Integer
    For Each Sh In ThisWorkbook.Worksheets
        i = i + 1
        Cells(i, 1) = Sh.Name '.Format("dd-mmm-YYYY")'dit werkt niet
    Next
End Sub

Via bovenstaande codes geef ik werkbladen een naam en haal ik de namen van tabbladen binnen.
Dit gaat in de meeste gevallen goed.
De namen van de tabbladen zijn echter datums.
Bij 3 aug 2012 gaat het mis hij plaatst dan 8 mrt 2012 in de cel
Hoe moet ik dit aanpassen.
Ergens moet er denk ik staan :'.Format("dd-mmm-YYYY")'
Maar waar?
 

Bijlagen

Even uit het hoofd.
Probeer dit eens:
Cells(i, 1) = Format(Sh.Name, "dd-mmm-YYYY")
 
OK de datum staat nu goed maar....

Er staan echter nog 2 vba codes in:
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
ActiveSheet.Name = [S1]
End Sub

Code:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
   Application.ScreenUpdating = False
   If Not Intersect(Target, Range("a1:a50")) Is Nothing Then
        
        With Sheets(Target.Value)
            .Visible = True
            Application.Goto .Range("S1")
        End With
    End If
    Application.ScreenUpdating = True
End Sub


De eerste zorgt er voor dat het tabblad de naam (een datum) krijgt van cel S1
De 2e code zorgt er voor dat bij dubbelklikken naar de juiste tabblad gesprongen wordt.
Dit laatste gaat niet wat het tabblad heet '3-8-2012' en in de cel staat '03-aug-2012'
en dit match dus niet.
 
Ok, maak er dan eens dit van:
Cells(i, 1) = "'" & Sh.Name

Het lijkt raar maar probeer het maar eens ;)
 
Laatst bewerkt:
Ok dat werkt :thumb:

Mag ik daaruit concluderen dat de namen van een werkblad altijd(?) als celformaat TEKST heeft, een nooit DATUM?
 
Dat klopt inderdaad.
 
Code:
Sub LoadSheets()
    Dim Sh As Worksheet
    Dim i As Integer
    For Each Sh In ThisWorkbook.Worksheets
        i = i + 1
        Cells(i, 1) = "'" & Sh.Name
    Next
End Sub

Toch nog een aanvullende vraag:

In kolom A komen de datums nu onder elkaar te staan.
Laatste datum komt bovenaan en de bestaande schuiven dus naar beneden.
Achter elke datum wordt nog weer tekst gezet, die bij die datum hoort.
Kolom B moet dus mee verschuiven als er een nieuwe datum wordt toegevoegd.
 
Kijk eerst eens goed naar de argumenten van de gebeurteniscode:

in plaats van
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    ActiveSheet.Name = [S1]
End Sub

gebruik
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    sh.Name = sh.Range("S1")
End Sub

Hetzelfde geldt voor:
Code:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
   Application.ScreenUpdating = False
   If Not Intersect(Target, Range("a1:a50")) Is Nothing Then
        
        With Sheets(Target.Value)
            .Visible = True
            Application.Goto .Range("S1")
        End With
    End If
    Application.ScreenUpdating = True
End Sub

gebruik liever
Code:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
   If Target.column=1 Then
      sh.Visible = True
      Application.Goto sh.Range("S1")
   end if
End Sub

en met deze is meteen je laatste vraag ook beantwoord:
Code:
Sub LoadSheets()
    For Each Sh In Sheets
        If Sh.Name <> "inhoud" Then Sheets("inhoud").Cells(Rows.Count, 1).End(xlUp).Offset(1) = CDate(Sh.Name)
    Next
End Sub
 
Laatst bewerkt:
Snb bedankt voor je reactie toch nog een paar vraagjes,
want je weet dat ik lang niet zo goed in VBA bent als jij.
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Sh.Name = Sh.Range("S1")
End Sub
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    ActiveSheet.Name = [S1]
End Sub
Wat is nu precies het voordeel van jou code?
Jij hou van kort en de mijne is net 1 letter korter :D

De "SheetBeforeDoubleClick" code zorgt er voor dat je na het juist tabblad springt.
Althans de door mij gegeven code.
Jou code springt alleen naar een andere cel in hetzelfde tabblad.

De "LoadSheets" code zorgt ervoor dat je een lijst krijgt van alle tabblad namen.
Jou code zet ze er gewoon nog een keer eronder en de kolom ernaast gebeurt niets mee.
En dat was nu net mij vraag.

Mis ik iets, doe ik iets fout of is het misschien een 'slip of the finger' van jou?
 
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Sh.Name = Sh.Range("S1")
End Sub

Het argument sh is het werkblad dat de gebeurteniscode start. Dat is niet altijd de 'activesheet' (als je VBA gebruikt).
Door het argument te gebruiken is het altijd duidelijk over welk werkblad je het hebt.
Als de code niet in de macromodule van een werkblad staat, doe je er goed aan altijd het werkblad waarover je het hebt aan de code toe te voegen. Anders gaat VBA er altijd van uit dat naar de 'activesheet' verwezen wordt. Dat kan tot onverwachte resultaten leiden.
Het argument sh staat er daarom niet voor niets, omdat deze gebeurteniscode zich in de macromodule van het werkboek bevindt.
 
Laatst bewerkt:
De "LoadSheets" code zorgt ervoor dat je een lijst krijgt van alle tabblad namen.
Jou code zet ze er gewoon nog een keer eronder en de kolom ernaast gebeurt niets mee.
En dat was nu net mij vraag.
Door de gegevens eronder te plaatsen hoef je nl. niets aan kolom B te wijzigen. Je kunt naats het nieuwe gegevesn andere gegevens in kolom B zetten.
Van 'bovenaf' aanvullen in een database is een bekende, onhandige beginnersfout (;))

Kwisnie wat die dubbelklik moest; maar

Code:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
   If Target.column=1 Then
      sh(target.value).Visible = True
      Application.Goto sh(target.value).Range("S1")
   end if
End Sub
 
Laatst bewerkt:
Van 'bovenaf' aanvullen in een database is een bekende, onhandige beginnersfout
De code voegt niets van bovenaf in. Hij bouwt hem helemaal opnieuw op.
Ik heb het opgelost door de tabbladen omgekeerd in de file te zetten.
Dan kom de nieuwste automatisch onderaan te staan en hoeft er niets met kolom B te gebeuren.

Kwisnie wat die dubbelklik moest
Als je niet weet wat de dubbelklik doet hoe kun je dan een ander code geven??
De nieuwe code doet het trouwens nog steeds niet.
Dus ik houd het maar bij de oude.

Bedankt voor de moeite.
 
He ja, natuurlijk:

Code:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
   If Target.column=1 Then
      [COLOR="#FF0000"]sheets[/COLOR](target.value).Visible = True
      Application.Goto [COLOR="#FF0000"]sheets[/COLOR](target.value).Range("S1")
   end if
End Sub

Omdat je vaak een code qua vorm kunt verbeteren zonder dat je weet wat de funktie is....
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan