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

Zoeken en vervangen code doet niets

Status
Niet open voor verdere reacties.

rob06052014

Gebruiker
Lid geworden
5 mei 2014
Berichten
48
Ik maak gebruik van de volgende code, maar het doet niet wat het moet doen.
De range wordt wel geselecteerd, maar er wordt niets vervangen. Test ik het vervangen door het selecteren van een range van bijvoorbeeld 1 cel, dan werkt wel, als ik zoeken en vervangen gebruik.
Is er iemand die me kan vertellen wat er mis gaat in onderstaande code? Waarom het niet doet wat ik verwacht?
Cells in de code heb ik ook eens vervangen door selection, maar dat maakte geen verschil.

Code:
Sub Maandenopvoeren()
'
' Maandenopvoeren Macro
'

'
range("AL5:BY6").Select
    Cells.Replace What:="1-4-2016", Replacement:="1-3-2016", LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Replace What:="1-5-2015", Replacement:="1-4-2016", LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Replace What:="1-6-2015", Replacement:="1-5-2016", LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Replace What:="1-7-2015", Replacement:="1-6-2016", LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Replace What:="1-8-2015", Replacement:="1-7-2016", LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Replace What:="1-9-2015", Replacement:="1-8-2016", LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Replace What:="1-10-2015", Replacement:="1-9-2016", LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Replace What:="1-11-2015", Replacement:="1-10-2016", LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Replace What:="1-12-2015", Replacement:="1-11-2016", LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Replace What:="1-01-2016", Replacement:="1-12-2016", LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Replace What:="1-02-2016", Replacement:="1-01-2017", LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells.Replace What:="1-03-2016", Replacement:="1-02-2017", LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    
    

End Sub



End Sub
 
Ik heb er niet echt verstand van maar moet je niet eerst Find gebruiken om de oude datum te vinden?
 
Dit doet dat wel:
Code:
Sub Maandenopvoeren()
Dim cl As Range
On Error Resume Next
Application.EnableEvents = False

 For Each cl In Range("AL5:BY6")
  If IsDate(cl) Then
   cl = DateSerial(Year(cl), Month(cl) - 1, Day(cl))
  End If
 Next

Application.EnableEvents = True
End Sub
 
Cobbe dank, maar hoe moet ik dit neer zetten/opnemen in de door mij genoemde code?
 
Niet in de code maar vervangen door deze code.
Staan in die range nog andere datums dan deze die vermeld staan in je code?
Laat het dan weten aub, kunnen we dat inpassen.
 
Ok, maar het is niet wat ik zoek, ja voor de betreffende code werkt het, maar als de waarde van de cel anders is werkt het niet. Waarom werkt mijn code niet, vraag ik me af, als ik daar een oplossing voor heb kan ik er verder mee.
 
Probeer het zo eens.

Code:
Sub Maandenopvoeren()

With Range("AL5:BY6")
    .Replace CDate("1-4-2015"), CDate("1-3-2016")
    .Replace CDate("1-5-2015"), CDate("1-4-2016")
    .Replace CDate("1-6-2015"), CDate("1-5-2016")
    .Replace CDate("1-7-2015"), CDate("1-6-2016")
    .Replace CDate("1-8-2015"), CDate("1-7-2016")
    .Replace CDate("1-9-2015"), CDate("1-8-2016")
    .Replace CDate("1-10-2015"), CDate("1-9-2016")
    .Replace CDate("1-11-2015"), CDate("1-10-2016")
    .Replace CDate("1-12-2015"), CDate("1-11-2016")
    .Replace CDate("1-01-2016"), CDate("1-12-2016")
    .Replace CDate("1-02-2016"), CDate("1-01-2017")
    .Replace CDate("1-03-2016"), CDate("1-02-2017")
End With
End Sub
 
Wat doet deze anders dan mijn macro?
Ik denk dat we de vraag niet goed begrijpen of dat ze verkeerd gesteld is natuurlijk, kan ook.
 
Jouw code is natuurlijk een stuk logischer. Maar volgens mij is de TS opzoek naar meerdere zoek en vervang acties in één macro. (Voor als er geen logica zit in de te vervangen datums)
 
Maar door de datums vast op te geven in zijn code zit er natuurlijk niets van flexibiliteit meer in.
 
Een beetje flexibel.
Misschien moet je dat maar oplossen met een inputbox.
Zo te zien wil Ts 11 maanden vooruit.
Code:
Sub hsv()
Dim i As Long, j As Long, y As Long
For i = 1 To 12
 y = y + 1
  Range("AL5:BY6").Replace DateSerial(2015 + j, y + 3, 1), Application.EDate(DateSerial(2015 + j, y + 3, 1), 11)
   If j > 9 Then
    j = 1
    y = 0
 End If
Next i
End Sub

Alleen wijkt de eerste regel af van de rest in de code van Ts.
Code:
Cells.Replace What:="1-4-2016", Replacement:="1-3-2016", LookAt:= _
        xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
 
Probeer het zo eens.

Code:
Sub Maandenopvoeren()

With Range("AL5:BY6")
    .Replace CDate("1-4-2015"), CDate("1-3-2016")
    .Replace CDate("1-5-2015"), CDate("1-4-2016")
    .Replace CDate("1-6-2015"), CDate("1-5-2016")
    .Replace CDate("1-7-2015"), CDate("1-6-2016")
    .Replace CDate("1-8-2015"), CDate("1-7-2016")
    .Replace CDate("1-9-2015"), CDate("1-8-2016")
    .Replace CDate("1-10-2015"), CDate("1-9-2016")
    .Replace CDate("1-11-2015"), CDate("1-10-2016")
    .Replace CDate("1-12-2015"), CDate("1-11-2016")
    .Replace CDate("1-01-2016"), CDate("1-12-2016")
    .Replace CDate("1-02-2016"), CDate("1-01-2017")
    .Replace CDate("1-03-2016"), CDate("1-02-2017")
End With
End Sub
Het gaat me er inderdaad om, om bepaalde dingen te vervangen, in dit geval ging het om een datum. Dat werkte niet met mijn code, omdat deze niet goed omging met de datum, zag het niet als een datum blijkbaar. Ik heb vervolgens de data omgezet in tekst, dus 1-3-2016 als 'mrt-16. Dat werkte wel voor mij. Ik ga je code nog wel proberen, om te kijken of het dan ook werkt, je code is ook veel overzichtelijker en een datum veld is ook wat makkelijker dan een tekst veld. Het bestand is een zakelijk bestand en zit niet op laptop van de zaak nu. Kom er later op terug.
 
Wat doet deze anders dan mijn macro?
Ik denk dat we de vraag niet goed begrijpen of dat ze verkeerd gesteld is natuurlijk, kan ook.
Sorry heb je gelijk in, ik roep wel vaker iets als voorbeeld wat in de praktijk dan weer iets anders blijkt te zijn. Begrijp dat het lastig is soms om daar op te reageren.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan