Dimy, prettig dat je probleem is opgelost. Bij bestudering van je code zie ik dat je eigenlijk al bezig bent met het vervangen van je sheet-formules. Maar alleen in die gevallen dat een formule een error heeft gegenereerd.
Ik heb dus de vrijheid genomen om je code wat aan te passen...
Option Base 1
Sub ReplaceFormulas()
Dim rRng As Range, rCell As Range
Dim sFmla As String
Dim arrFoutDump(100, 2) As Variant 'maximaal 100 cellen die niet worden aangepast
Dim i As Integer, x As Integer
Const sKolom As String = "Q" 'verander deze kolomletter in de juiste kolom voor het tonen van de fout-tabel
i = 0
For Each rCell In Cells.SpecialCells(xlCellTypeFormulas)
sFmla = Right(rCell.Formula, Len(rCell.Formula) - 1)
If MsgBox("Wil je de volgende formule" & Chr(13) & Chr(13) & _
rCell.Formula & Chr(13) & Chr(13) & _
"in cel " & rCell.Address(False, False) & " vervangen voor deze" & Chr(13) & Chr(13) & _
"=IF(ISERROR(" & sFmla & ");"""";" & sFmla & ")", _
vbYesNo, "Kies...") = vbYes Then
rCell.Formula = "=if(iserror(" & sFmla & "),""""," & sFmla & ")"
Else:
rCell.Interior.ColorIndex = 7 'hard roze
i = i + 1
arrFoutDump(i, 1) = rCell.Address(False, False)
arrFoutDump(i, 2) = rCell.Formula
End If
Next rCell
Cells(1, sKolom).Resize(, 2).Value = Array("CEL", "FORMULE")
For x = 1 To i
ActiveSheet.Hyperlinks.Add Anchor:=Cells(x + 1, sKolom), Address:="", _
SubAddress:=arrFoutDump(x, 1), TextToDisplay:=arrFoutDump(x, 1)
Cells(x + 1, sKolom).Offset(, 1).Value = "'" & CStr(arrFoutDump(x, 2))
Next x
Columns(sKolom).Resize(, 2).AutoFit
End Sub
Hiermee ga je in je sheet formule voor formule bekijken (mét melding) of je 'm wilt vervangen of niet. Als je Yes geeft, zal de aanwezig formule worden aangevuld met het 'iserror' gedeelte. Als je No geeft zal de formule ongemoeid blijven, maar wel worden opgeslagen in de VBA-array. Als alle formule-cellen doorlopen zijn, wordt de array geleegd op een door jou aangegeven plaats (geef in de code ff de juiste kolom op van waaraf kan worden begonnen). In de aangemaakte tabel worden de cellen als hyperlink getoond en de ongecorrigeerde formule als text. Zo kan je heel makkelijk zien waarom je de formule niet hebt willen veranderen om er vervolgens snel naar toe te gaan om 'm handmatig aan te passen.
De reden voor deze verandering van je code is namelijk dat ik denk dat je in je 'probleem-workbook' formules hebt aangepast die je beter niet had kunnen aanpassen.
Kijk maar 'ns of je deze code kan toepassen in je eigen herstelde workbook (maak wel eerst een backup!). Het op deze manier doorlopen van zo'n 300 verschillende formules kost je waarschijnlijk een stuk minder tijd dan dat je 't handmatig zou gaan doen. Maar zo kan je toch lekker je workbook updaten naar je eigen wensen.
Voor het gemak plaats ik ook nog het workbook waarin ik de code aangepast heb. Kan je eerst ff 'droog' oefenen.
Groet, Leo