Waarde: #VERW! uit cellen verwijderen

Status
Niet open voor verdere reacties.

pietjedekikker

Gebruiker
Lid geworden
16 apr 2007
Berichten
24
Ik ben al enige tijd op zoek naar een VBA-code die in een bepaalde range (bv C:C) zoekt naar de tekst #VERW! in de formule van verschillende cellen en die deze dan verwijderd.

Het is namelijk zo dat ik een sheet heb met allerlei berekeningen (tot 2000 regels). Het komt voor dat er bepaalde rijen worden verwijderd waardoor er her en der verwijzingen in formules ontstaan die niet bestaan.
 
Hoi

Ik heb code voor jou geschreven om dit te doen.

Voer de sub uit en die roept dan zelf de functie aan. De kolom is daarbij een argument.

Veel plezier ermee.

Wigi



Code:
Sub FindAllRefErrors()
    
    Dim rAllRefErrors As Range
    
    Set rAllRefErrors = AllRefErrors(Columns("C:C"))
    
    If Not rAllRefErrors Is Nothing Then
        rAllRefErrors.Select
    Else
        MsgBox "No REF errors found", vbInformation, "Output"
    End If

End Sub

Function AllRefErrors(r As Range) As Range
    
    Dim rTemp As Range
    Dim rTemp2 As Range
    Dim rng As Range
    Dim CellValue As Variant
    
    On Error Resume Next
    Set rTemp = r.SpecialCells(xlCellTypeFormulas, xlErrors)
    On Error GoTo 0
    
    If rTemp Is Nothing Then
        
        Set AllRefErrors = Nothing
        Exit Function
    
    Else
        
        For Each rng In rTemp
            
            CellValue = rng.Value
            
            If CellValue = CVErr(xlErrRef) Then
            
                If rTemp2 Is Nothing Then
                
                    Set rTemp2 = rng
                
                Else
                
                    Set rTemp2 = Application.Union(rTemp2, rng)
                    
                End If
            
            End If
            
        Next
        
    End If
    
    Set AllRefErrors = rTemp2
    
End Function

Wigi
 
Hoi

Bedankt voor het script, ziet er goed uit! Alleen verwijderd deze nog niet de waarde #VERW! uit de cel. Heb je daar nog ideeen voor?
 
En wat als er een formule staat met een paar geldige verwijzingen, en een paar die een fout opleveren?

Daarom dat mijn code die cellen aanduidt ipv verwijdert.
 
Dat is precies mijn probleem. In de sheet staan (door het verwijderen van rijen) in diverse cellen een paar ongeldige verwijzingen tussen een paar goede verwijzingen. Het is juist mijn bedoeling om de ongeldige met een script te verwijderen. Aangezien het ongeveer 2000 rijen zijn is een script wel wenselijk.

Bedankt voor je snelle reactie!
 
Dat is volgens mij niet doenbaar.

Ik kan waarschijnlijk wel de slechte verwijzing op zich eruit halen, maar dan is uw formule wel stuk. Bvb. krijg je dan

=A1+

in plaats van

=A1+#VERW!

En dat eerste is geen formule.

Wigi
 
Ik zou er wel mee geholpen zijn omdat al de formules optelformules zijn. In dit geval kan ik dus de + meenemen waardoor de formule intact blijft.

Ik hoor het wel. Bedankt weer!
 
Ga anders eens door de file door dit:

+#ref!

te vervangen door "niets" (dus veldje leeg laten).

Dan zouden er al veel weg moeten zijn.

Als je een Nederlandse Excel versie hebt, doe dan verw in plaats van ref.
 
Ga anders eens door de file door dit:

+#ref!

te vervangen door "niets" (dus veldje leeg laten).

Dan zouden er al veel weg moeten zijn.

Als je een Nederlandse Excel versie hebt, doe dan verw in plaats van ref.

Heb je ondertussen bovenstaande al kunnen proberen?

Bij mij werkt het als ik +#REF! vervang door "niets".
Daarna #REF!+ vervangen door "niets".

(Heb Engelse Excel versie nu).

Wigi
 
Laatst bewerkt:
Ik heb dan toch maar een geautomatiseerde oplossing gezocht met VBA:

Code:
Sub DeleteFormula_Ref()

    Dim oCell As Range
    Dim cRng As Range

    Sheets("Sheet3").Activate 'pas aan

    On Error Resume Next
CheckAgain:
    Set cRng = Selection.SpecialCells(xlFormulas, 16)
    If cRng Is Nothing Then Exit Sub
    For Each oCell In cRng
        SearchF (oCell.Formula)
        oCell.Formula = Str
    Next
    Set cRng = Nothing
    GoTo CheckAgain
End Sub

Function SearchF(cell)

    Dim arr
    Dim l As Long
    
    Const sRef As String = "#REF!"
    
    arr = Split(cell, "+")
    
    For l = LBound(arr, 1) To UBound(arr, 1)
        If InStr(arr(l), sRef) Then arr(l) = ""
    Next
    
    Str = Join(arr, "+")
    
    Do While InStr(Str, "++") > 0
        Str = Application.WorksheetFunction.Substitute(Str, "++", "+", 1)
    Loop
    
    SearchF = Str
    
End Function

Lees deze topic door (in het Engels), het eerste stuk van de code is daarvan overgenomen:

http://www.mrexcel.com/archive/General/4291.html

De functie daar was echter niet correct, die heb ik nu verbeterd.

Wigi
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan