#VERW! word niet herkend.

Status
Niet open voor verdere reacties.

Emelkert

Gebruiker
Lid geworden
18 mrt 2016
Berichten
61
Ik heb op een werkblad een overzicht van een paar (zoek)cellen die diverse waarden van cellen op een werkblad samenvoegen en bij elkaar optellen. Het punt is echter dat deze werkbladen soms veranderd moeten worden en er veel cellen zijn die bij elkaar opgeteld moeten worden dus handwerk is teveel werk.

Nu heb ik een marco gemaakt waarbij dit mogelijk is. Echter, als de naam in de zoekcellen niet overeenkomen met de naam van het werkblad (want het werkblad bestaat niet), krijg ik als resultaat #VERW! te zien.
Dit is daarna niet meer terug te draaien en levert mij meer werk op om het ongedaan te maken.

Nu ben ik dus een code aan het schrijven die de oude waarde moet herstellen als de nieuwe waarde resulteert in '#VERW!', maar VBA herkent het resultaat #VERW! niet...
Graag jullie mening erover. Indien jullie nog wat anders zien, laat het weten, ik ben nieuw in het VBA gebeuren en zit continu op het helpmij forum met vragen.

Om een beetje duidelijkheid te scheppen heb ik ' code oud & ' code nieuw aan gegeven zodat je snel kan zien wat onder de '' test case'' valt en wat al goed werkt.

Code:
Sub Jaar_Verlagen_test()

[B]'   Code oud[/B]
    
    ActiveSheet.Unprotect
    Range("F27") = Range("F27") - 1
    
[B]'   Code nieuw[/B]

    Range("I24").Select
    target = Range("I24").Select
    Value = target
    
    ActiveCell.Replace What:=Range("I24"), Replacement:=Range("F27"), LookAt:=xlPart, _
        SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
        Cells.Find(What:=Range("H29"), After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate

    If Range("I24") = ("#VERW!") Then
        getoldvalue = True
        MsgBox ("Werkblad niet gevonden!")
        Range("F27") = Range("F27") + 1
    Else
        getoldvalue = False
        
[B]'   Zoekopdracht oud[/B]

        Cells.Replace What:=Range("H29"), Replacement:=Range("F27"), LookAt:=xlPart, _
        SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    End If
            
[B]'   Code oud[/B]
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

Nogmaals, ik weet niet of de code werkt, maar het is de bedoeling dat hij eerst moet controleren of het werkblad met de naam van F27 bestaat. Indien die niet bestaat, moet de marco niet doorgaan en afbreken.

Je kan ook zeggen dat de marco d.m.v. F27 gaat controleren of het werkblad wel bestaat. Als die bestaat dat de marco dán de cells.replace functie gaat uitvoeren. Ik weet alleen niet hoe die code heet en in VBA moet verwerken...
 
Je moet niet zoeken naar de tekst #VERW! want dat is niet wat er in de cel staat, alleen wat er wordt getoond.
Doe dit:
If IsError(Range("I24")) Then ...
 
Oh, die IsError werkt zo.. ik had hem precies andersom en kreeg toen de foutmelding. Bedankt, ik ga het morgen proberen en zal het resultaat posten.
 
Zo werkt 'ie inderdaad. Het levert een Boolean op.
 
Als je alle cellen met zo'n waarde wil selecteren:

Code:
Sub M_snb()
   cells.specialcells(2,16).select
End sub

Boolean waarde: waar/niet-waar (true/false; 0/1)
 
Oke, bedankt.

Ondertussen de code aangepast, maar de macro veranderd de cel niet terug naar de oorspronkelijke waarde.
Voordat ik de cel aanpas heb ik (naar mijn weten) aangegeven dat cel I24 in het ''geheugen'' word opgeslagen.
Als de uitkomst van de opdracht resulteert in #VERW!, hoort ie cel I24 terug te brengen zoals opgeslagen.
Helaas doet hij dat niet... Ik geloof dat ik wat fout doe met getoldvalue = true, want de 2 regels erna doet hij wel.
 
Laat eens zien wat je nu hebt.
 
Gevonden! Bedankt Edmoor
Heb een kopie en plak stukje erin verwerkt.
Was even typen, maar heb t voor elkaar

Code:
Sub Jaar_Verhogen()

    ActiveWorkbook.Save
    ActiveSheet.Unprotect
    Range("F27") = Range("F27") + 1
       
    Range("I24").Select
    Selection.Copy
    Range("J24").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("I24").Select
    ActiveCell.Replace What:=Range("H29"), Replacement:=Range("F27"), LookAt:=xlPart, _
        SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
        Cells.Find(What:=Range("H29"), After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
        
    If IsError(Range("I24")) Then
        Range("J24").Select
        Selection.Copy
        Range("I24").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Range("J22").Select
        Selection.Copy
        Range("J24").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Range("F6").Select
        MsgBox ("Jaar niet gevonden! Kan niet verder.")
        Range("F27") = Range("F27") - 1
    Else
                
        Range("J22").Select
        Selection.Copy
        Range("J24").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        
        Cells.Replace What:=Range("H29"), Replacement:=Range("F27"), LookAt:=xlPart, _
        SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    End If
    
    Range("F6").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
 
Het werkt nu dus zoals je wilde? Dat kopiëren en plakken in de code kan overigens op een veel betere manier, maar dat is niet waar je om vroeg.
 
Laatst bewerkt:
Kijk eens wat je kunt doen met de excelformule 'iferror' (isfout)
 
Het werkt nu dus zoals je wilde? Dat kopiëren en plakken in de code kan overigens op een veel betere manier, maar dat is niet waar je om vroeg.

Welke manier bedoel je?
Ik ben erg nieuw betreft VBA, dus als iets makkelijker kan, is het mooi meegenomen. Ondertussen heb ik berichtenboxen erin verwerkt met optie knoppen.
Ipv de oude berichtenbox waarbij hij enkel het probleem aangaf en alles terug deed, is er nu een optie om verder te gaan.

Code:
MsgBox "Kan niet verder." & vbNewLine & vbNewLine & "Er moet eerst een nieuw jaar gemaakt worden.", vbOKOnly + vbCritical, "Actie fout"
        Antwoord = MsgBox("Maak eerst een nieuw kalenderjaar aan." & vbNewLine & vbNewLine & "Wil je dit nu doen?", vbYesNo + vbQuestion, "Jaar niet gevonden!")
        If Antwoord = vbNo Then
            MsgBox "Actie word ongedaan gemaakt.", vbOKOnly + vbExclamation, "Fout!"
        ElseIf Antwoord = vbYes Then
            Sheets("Nieuw jaar").Visible = True
            Sheets("Nieuw jaar").Copy After:=Sheets(2)
            ActiveSheet.Name = ['Personalia'!I29]
            ActiveSheet.Unprotect
            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
            ActiveSheet.EnableSelection = xlUnlockedCells
            Range("F3").Select
            Sheets("Nieuw jaar").Visible = False
            Sheets("Personalia").Select
            ActiveSheet.Unprotect
            Range("I29") = Range("I29") + 1
            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
            MsgBox "Jaar aangemaakt!", vbInformation, "Informatie"
            Run ("Jaar_Verhogen")
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan