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

Naar vorige sheet verwijzen zonder naam te geven

Status
Niet open voor verdere reacties.

weusty

Gebruiker
Lid geworden
23 feb 2007
Berichten
133
Ik heb een formulier gemaakt waar via een marco een nieuw werkblad wordt aangemaakt. Dit werkblad krijgt telkens als naam het nummer van de week.

Nu dus 41

Nu moet er een verwijzing in komen naar de vorige sheet 40
dat doe ik zo:
.Range("D1:F1").FormulaR1C1= "='40'!RC:RC[2]"
en werkt goed.

Maar nu maak ik volgende week weer een nieuwe sheet aan die automatisch de naam 42 krijgt.

Alleen zal bovenstaande code niet automatisch 41 als vorige week nemen.

hoe kun je dit oplossen?:rolleyes:

groet weust
 
Wat is ook alweer de code die ik voor je had gemaakt om de nieuwe week aan te maken? Volgens mij volsta je gewoon met -1
 
Dit was de code:

Sub CreateSheet()
Dim wsSheet As Worksheet
On Error Resume Next
Set wsSheet = Sheets(Format(Now, "ww"))
On Error GoTo 0
If Not wsSheet Is Nothing Then
MsgBox "Blad reeds aangemaakt. " & vbNewLine & "Blad wordt geladen. ", vbOKOnly + vbInformation, "Weeknummer"
Sheets(Format(Now, "ww")).Activate
Else
Application.Sheets.Add
ActiveSheet.Name = Format(Now, "ww")
ApplySettings
End If
End Sub

heb nu deze code:
.Range("B14: E14").FormulaR1C1 = "Format(Now, "ww"-1)!RC:RC[2]"

krijg deze melding:
verwacht: instructie-einde

groet weust
 
Je krijgt inderdaad een foutmelding, omdat de code gewoonweg niet klopt. Maar ik moet toegeven; Je doet wel je best. Grote pluim van mijn kant ;) (Ow ja... geen code claimen die je niet hebt gemaakt :p )

Waarom wil je in al de cellen B14 tot E14 de datum hebben staan? En ik zie dat je de codes zlef naar links hebt uitgelijnd, waardoor het lezen erg ongemakkelijk is. Netjes proberen te programmeren, zoals ik je eerder heb gezegd.
 
Laatst bewerkt:
Code:
Sub CreateSheet()
    Dim wsSheet As Worksheet
    On Error Resume Next
    Set wsSheet = Sheets(Format(Now, "ww"))

    On Error GoTo 0

    If Not wsSheet Is Nothing Then
        MsgBox "Blad reeds aangemaakt. " & vbNewLine & "Blad wordt geladen. ", vbOKOnly + vbInformation, "Weeknummer"
        Sheets(Format(Now, "ww")).Activate
    Else
        Application.Sheets.Add
        With ActiveSheet
            .Name = Format(Now, "ww")
            .Range("B14:E14").Value = .Name - 1
        End With
        ApplySettings
    End If
End Sub
 
Ben al heel ver met de uren lijst. Aantal nieuwe tools gemaakt.
Het VBA'en gaat steeds beter.

Maar heb dus een extra knop gemaakt naast nieuwe week.
Deze maakt ook op de zelfde manier een nieuwe week aan,
alleen zullen er een aantal gegevens zoals projectnamen worden
overgenomen uit de week er voor. Ten minsten als dat lukt :rolleyes:

Heb dus een macro opgenomen:
.Range("I15:M15")..FormulaR1C1 = "='40'!RC:RC[4]"

Maar die 40 staat dus voor de sheet naam, maar die is variabel. Volgende week moet die 41 zijn dus dat schiet niet op.

heb er nu dit van gemaakt:
.Range("B14:D14").FormulaR1C1 = "= sheets.Item 'Now,ww-1'!RC:RC[2]"

maar dan wil die een bestand openen met de naam Now,ww-1 :confused:

Dus kom er niet meer helemaal uit.

en wat betreft:
HTML:
Netjes proberen te programmeren, zoals ik je eerder heb gezegd.
dat lukt me nog niet echt. :D

weust
 
ja die is elke week anders.

in week 45, moeten er gegevens worden gehaalt uit week 44. Maar in week 47 worden deze gehaalt uit week 46. Dus altijd uit de week er voor.
 
Waarom heb je hem dan op afgehandeld gezet? :confused:
====================================================================

Was even knoeien, maar op deze code uitgekomen, die de gegevens overneemt wanneer een blad wordt geactiveerd vanuit de vorige blad. Zorg er dus wel voor dat de volgorde niet wijzigt, anders gaat het nog niet werken.

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim i As Integer
    i = ActiveSheet.Index - 1
    If i <= 0 Then Exit Sub
    ActiveSheet.Range("B14:E14").Value = Sheets(i).Range("B14:E14").Value
End Sub

Ik had het overigens ook geprobeerd met ActiveSheets.Name -1, aangezien we alleen maar met getallen werken, maar dat wilde op 1 of andere manier niet. Jammer, want daarmee had de volgorde van de werkbladen niet uitgemaakt.
 
heb wat anders bedacht:

With Sheets(Format(Now, "ww" - 1))
.Activate
.Range("B14: D14").Select
.Selection.Copy
End With

With Sheets(Format(Now, "ww"))
.Activate
.Range("B14: D14").Select
.Selection.Paste
End With

ik dacht dat wat makelijker zou zijn maar werkt natuurlijk ook niet.:(
 
Ow ja.... Plaats deze code in ThisWorkbook. Je kunt hem dus gewoon verder uit gaan breiden op deze manier

Code:
With ActiveSheet
    .Range("B14:E14").Value = Sheets(i).Range("B14:E14").Value
'    .Range("......).Value = Sheets(i).Range("....
end With
Snappie?
 
hey,

:thumb::thumb:SUPER:thumb::thumb:

:thumb:dank dank dank:thumb:

als alles straks (over een tijdje) af is, zal ik je hem wel versturen dan kun je kijken wat het is geworden!

Groet een :D Weust
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan